7

我有一个简单的对象模型如下...

public class Product
{
    public long ProductId { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

使用 EntityFramework 生成底层数据库会产生以下架构...

产品

  • 产品编号
  • 类别 ID
  • Category_CategoryId

类别

  • 类别 ID

Products表中,CategoryId列始终设置为 0,而Category_CategoryId列包含产品所属类别的 id。

如何在CategoryId列中设置类别 id 并防止生成Category_CategoryId列?

4

1 回答 1

8

ForeignKey属性应用于CategoryORCategoryId属性。并更改CategoryId属性类型以匹配CategoryIdCategory(都应该是 long 或 int)。

public class Product
{
    public long ProductId { get; set; }
    public long CategoryId { get; set; }
    [ForeignKey("CategoryId")]
    public Category Category { get; set; }
}

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

或者

public class Product
{
    public long ProductId { get; set; }
    [ForeignKey("Category")]
    public long CategoryId { get; set; }
    public Category Category { get; set; }
}

您可以通过流利的映射做同样的事情:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>()
        .HasRequired(p => p.Category)
        .WithMany(c => c.Products)
        .HasForeignKey(p => p.CategoryId)
        .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
}
于 2013-02-06T12:54:50.243 回答