我有一个主 EF 实体类,它具有到另一个 EF 实体类集合的导航属性,具有一对多关系。第二个实体具有 DateCreated 属性和以一对一关系返回主类的导航引用
enter code here
。public class MainClass
{
public virtual List<OtherClass> OtherClasses { get; set;}
public virtual OtherClass LatestOtherClass { get; set; }
}
public class OtherClass
{
public virtual MainClass { get; set;}
public virtual DateTime DateCreated { get; set;}
}
我收到的错误是“无法确定“OtherClass”类型的“MainClass.LatestOtherClass”导航所表示的关系。 建议我手动配置关系,但到目前为止,我一直无法找到一种方法来成功执行此操作,而不会导致 DbContext 错误或破坏相反方向的关系。
这可能吗?如果可以,我该如何配置?
如果这有任何后果的话,这是针对 Postgresql 数据库的。
我认为下面的代码将有助于解决您的问题。
public class MainClass
{
public int Id { get; set; } // Primary Key for EF
public virtual List<OtherClass> OtherClasses { get; set; }
public int? LatestOtherClassId { get; set; } // Foreign Key to OtherClass
public virtual OtherClass LatestOtherClass { get; set; }
}
public class OtherClass
{
public int Id { get; set; } // Primary Key for EF
public int MainClassId { get; set; } // Foreign Key to MainClass
public virtual MainClass MainClass { get; set; }
public DateTime DateCreated { get; set; }
}
public class MyDbContext : DbContext
{
public DbSet<MainClass> MainClasses { get; set; }
public DbSet<OtherClass> OtherClasses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Configure one-to-many relationship between MainClass and OtherClass
modelBuilder.Entity<MainClass>()
.HasMany(m => m.OtherClasses)
.WithOne(o => o.MainClass)
.HasForeignKey(o => o.MainClassId);
// Configure self-referencing LatestOtherClass as an optional relationship
modelBuilder.Entity<MainClass>()
.HasOne(m => m.LatestOtherClass)
.WithMany() // No navigation back to MainClass from this side
.HasForeignKey(m => m.LatestOtherClassId)
.IsRequired(false);
base.OnModelCreating(modelBuilder);
}
}