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

时间:2014-02-19 17:58:42

标签: c# entity-framework

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

在SaveChanges上获取此异常:

  

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

1 个答案:

答案 0 :(得分:0)

使用此代码:

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

查看以下链接:

Associations in EF Code First: Part 4 – Table Splitting

Associations in EF Code First: Part 5 – One-to-One Foreign Key Associations

Code First and Fluent API one to one relationship