gpt4 book ai didi

c# - Entity Framework Code First 中的多个自引用属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:59 25 4
gpt4 key购买 nike

我有一个包含两个导航属性的类。

public class Entity
{
public int Id { get; set; }
public Entity Parent { get; set; }
public Entity BaseEntity { get; set; }
}

当我运行应用程序时,EF 抛出一个 expcetion,上面写着“无法确定类型‘Test.Entity’和‘Test.Entity’之间关联的主体端。必须使用关系流畅的 API 或数据注释显式配置此关联的主体端。”。

据我所知,当定义一对一关系并且没有为 EF 提供正确确定关系双方的提示时会引发此异常。

现在我有两个问题。

首先,为什么这里会抛出这个异常? EF 是否以某种方式将这种情况视为一对一关系?

其次,如何使用属性解决这个问题?我知道以下 Fluent API 代码可以解决问题,但我更喜欢属性。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>().HasOptional(e => e.Parent).WithOptionalDependent();
modelBuilder.Entity<Entity>().HasOptional(e => e.BaseEntity).WithOptionalDependent();
}

最佳答案

我在 MSDN 上找到了我的问题的答案。

https://social.msdn.microsoft.com/Forums/en-US/08bba96a-20b2-4a3c-9e0e-a5475b703dfe/code-first-self-referencing-foreign-key?forum=adodotnetentityframework

并且根据已批准的答案(由 Rowan Miller 提供),以下代码正确描述了这种关系(不是我的代码)。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AssetType>().HasOptional(a => a.parent).WithMany();
modelBuilder.Entity<AssetType>().HasOptional(a => a.baseAssetType).WithMany();
}

关于c# - Entity Framework Code First 中的多个自引用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com