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

Entity framework 实体框架在生成数据库时创建下划线列,entity-framework,Entity Framework,我有一个简单的对象模型如下 public class Product { public long ProductId { get; set; } public int CategoryId { get; set; } public Category Category { get; set; } } 及 公共类类别 { 公共长类别ID{get;set;} 公共列表产品{get;set;} } 使用EntityFramework生成基础数据库将导致以下架构 产品 产品I

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

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

公共类类别
{
公共长类别ID{get;set;}
公共列表产品{get;set;}
}
使用EntityFramework生成基础数据库将导致以下架构

产品

  • 产品ID
  • 类别
  • 类别\类别ID
类别

  • 类别
Products表中,CategoryId列始终设置为0,而Category\u CategoryId列包含产品所属类别的id

如何在CategoryId列中设置类别id,并防止生成category\u CategoryId列?

将属性应用于
category
CategoryId
属性。并更改
CategoryId
属性类型以匹配
CategoryId
类别的
CategoryId
(两者都应为long或int)


您可以通过fluent mapping执行相同的操作:

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);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(p=>p.Category)
.有许多(c=>c.产品)
.HasForeignKey(p=>p.CategoryId)
.WillCascadeOnDelete(假);
基于模型创建(modelBuilder);
}

大眼睛!问题实际上是Category.CategoryId很长,而Product.CategoryId是int。一旦我更正了类型,CategoryId很长,在这两种情况下,模式生成都按预期工作。ForeignKey属性不是必需的。如果您有一个复合外键呢?
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);
}