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