c# – 实体框架:如何在自引用父子关系上指定外键列的名称?
发布时间:2020-12-15 21:57:52 所属栏目:百科 来源:网络整理
导读:我正在尝试指定列名以将“外键”映射到使用Fluent API.我正在连接到SQL Express的一个实例.我搜索过Stack Overflow和Google,但许多不同的配置示例给了我相同的结果. 产品类别 public class Product{ public int ProductId { get; set; } public string Name
我正在尝试指定列名以将“外键”映射到使用Fluent API.我正在连接到SQL Express的一个实例.我搜索过Stack Overflow和Google,但许多不同的配置示例给了我相同的结果.
产品类别 public class Product { public int ProductId { get; set; } public string Name { get; set; } public int? ParentId { get; set; } public virtual Product ParentProduct { get; set; } public virtual ICollection<Product> ChildProducts { get; set; } } 产品映射到实体框架 public class ProductMap : EntityTypeConfiguration<Product> { public ProductMap() { HasKey(p => p.ProductId); Property(p => p.Name) .IsRequired(); // Self referencing foreign key association Property(c => c.ParentId) .IsOptional(); HasMany(c => c.ChildProducts) .WithOptional(c => c.ParentProduct) .HasForeignKey(c => c.ParentId); } } 问题 当我运行程序并且EF创建数据库时,结果是ParentID列出现NULL并且它创建了一个名为ParentProduct_ProductId的列.此列包含ParentId的正确值. 我不熟悉使用Fluent API和EF,所以我将这个问题归结为缺乏经验.如何让自动生成的列填充ParentId列? 解决方法
尝试此解决方案:
public class ProductMap : EntityTypeConfiguration<Product> { public ProductMap() { HasKey(p => p.ProductId); Property(p => p.Name) .IsRequired(); // Self referencing foreign key association Property(c => c.ParentId) .IsOptional(); HasOptional(x => x.Parent) .WithMany(x => x.ChildProducts) .HasForeignKey(x => x.ParentId) .WillCascadeOnDelete(false); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容