实体框架在生成数据库时创建下划线列

时间:2013-02-06 12:38:11

标签: entity-framework

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

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

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

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

1 个答案:

答案 0 :(得分:8)

ForeignKey属性应用于CategoryCategoryId属性。并更改CategoryId属性类型以匹配CategoryId类的Category(两者都应为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; }
}

OR

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);
}