Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每个层次结构的表中一对一_C#_Entity Framework - Fatal编程技术网

C# 每个层次结构的表中一对一

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

在SaveChanges上获取此异常:

无法确定从属操作的有效顺序。依赖关系可能由于外键约束、模型要求或存储生成的值而存在

使用此代码:

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);
    }