我有一个简单的对象模型如下......
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生成基础数据库会产生以下架构...
产品
分类
在产品表中, CategoryId 列始终设置为0,而 Category_CategoryId 列包含产品所属类别的ID到。
如何在 CategoryId 列中设置类别ID并阻止生成 Category_CategoryId 列?
答案 0 :(得分:8)
将ForeignKey属性应用于Category
或CategoryId
属性。并更改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);
}