大佬教程收集整理的这篇文章主要介绍了带有 Entity Framework Core 5 的自引用表,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用中有一个自引用实体。与其他包类型具有依赖关系(作为列表)的包类型。我正在尝试使用模型构建器设计所需的中间表。不幸的是,我无法正确填写密钥。
system.invalIdoperationException: '无法跟踪类型为 'PackageDependency (Dictionary
public class PackageType
{
[Key]
public String Tag { get; set; }
public virtual List<PackageType> DependencIEs { get; set; } = new List<PackageType>();
}
数据库上下文:
protected overrIDe voID OnModelCreaTing(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PackageType>()
.Hasmany(p => p.DependencIEs)
.WithMany(p => p.DependencIEs)
.UsingEntity<Dictionary<String,object>>(
"PackageDependency",j => j
.HasOne<PackageType>()
.WithMany()
.HasForeignKey("PackagEID")
.HasConsTraintname("FK_PackageDependency_PackagEID")
.ondelete(deleteBehavior.CascadE),j => j
.HasOne<PackageType>()
.WithMany()
.HasForeignKey("DependencyID")
.HasConsTraintname("FK_PackageDependency_DependencyID")
.ondelete(deleteBehavior.ClIEntCascadE),e => e.HasKey("PackagEID","DependencyID"));
}
有人给我提示吗?
非常感谢!
我很惊讶 EF Core 竟然允许这样做
.Hasmany(p => p.Dependencies)
.WithMany(p => p.Dependencies)
(关系双方使用同一个集合)不报错。
@H_824_2@many-to-many 需要 2 个集合导航属性 - 关系的每一侧一个。所以即使这是自引用关系,它仍然需要绑定到相应的连接实体 FK 的 2 个单独集合导航属性。例如public virtual List<PackageType> ChildDependencies { get; set; } = new List<PackageType>();
public virtual List<PackageType> ParentDependencies { get; set; } = new List<PackageType>();
和
.Hasmany(p => p.ChildDependencies) // -> j.PackagEID
.WithMany(p => p.parentDependencies) // -> j.DependencyId
,
你需要两个参考,一个是向上的,一个是向下的:
public class PackageType
{
[Key]
public String Tag { get; set; }
public ICollection<PackageDependency> Dependents { get; set; }
public ICollection<PackageDependency> Pendents { get; set; }
}
public class PackageDependency
{
public String DependentTag { get; set; }
public PackageType Dependend { get; set }
public String PendentTag { get; set; }
public PackageType Pendend { get; set; }
}
protected override void OnModelCreaTing(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PackageDependency>()
.HasKey(r => new { r.DependentTag,r.PendentTag });
modelBuilder.Entity<PackageDependency>()
.HasOne(r => r.Pendend)
.WithMany(p => p.Dependents)
.Isrequired()
.ondelete(deleteBehavior.NoAction);
modelBuilder.Entity<PackageDependency>()
.HasOne(r => r.Dependend)
.WithMany(d => d.Pendents)
.Isrequired()
.ondelete(deleteBehavior.NoAction);
}
以上是大佬教程为你收集整理的带有 Entity Framework Core 5 的自引用表全部内容,希望文章能够帮你解决带有 Entity Framework Core 5 的自引用表所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。