C# 每个层次结构的表中一对一
在SaveChanges上获取此异常: 无法确定从属操作的有效顺序。依赖关系可能由于外键约束、模型要求或存储生成的值而存在 使用此代码:C# 每个层次结构的表中一对一,c#,entity-framework,C#,Entity Framework,在SaveChanges上获取此异常: 无法确定从属操作的有效顺序。依赖关系可能由于外键约束、模型要求或存储生成的值而存在 使用此代码: public class BasePage { public int Id { get; set; } ... } public class Region : BasePage { public virtual MapCoordinates Map { get; set; } ... } pu
public class BasePage
{
public int Id { get; set; }
...
}
public class Region : BasePage
{
public virtual MapCoordinates Map { get; set; }
...
}
public class Place: BasePage
{
public virtual MapCoordinates Map { get; set; }
...
}
public class MapCoordinates
{
[Key, ForeignKey("BasePage")]
public int Id { get; set; }
public virtual BasePage BasePage { get; set; }
...
}
查看以下链接:
我不希望BasePage有映射,只有几个派生类应该有它。你想有表拆分吗?我将BasePage和它的派生类区域、位置等放在一个表中,映射在另一个表中。好的,我认为在MapCoordinate中导航到region和place而不是BasePage,并且不能使用在BasePage和MapCoordinate之间拆分的表,然后在MapCoordinate中必须有两个外键,一个用于region,一个用于place。是的,这可能会起作用,但看起来像是一个丑陋的解决方案,因为事实上我不需要两个外键。
public class BasePage
{
public int Id { get; set; }
public virtual MapCoordinate Map { get; set; }
...
}
public class Region : BasePage
{
...
}
public class Place: BasePage
{
...
}
public class MapCoordinate
{
[Key]
public int BasePageId { get; set; }
...
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<BasePage>()
.HasRequired(e => e.MapCoordinate)
.WithRequiredPrincipal();
modelBuilder.Entity<BasePage>().ToTable(BasePages);
modelBuilder.Entity<MapCoordinate>().ToTable(MapCoordinates);
}