【问题标题】:Entity Framework Code First custom mapping using partial key使用部分键的实体框架代码优先自定义映射
【发布时间】:2011-12-13 19:27:41
【问题描述】:

是否可以使用Entity Framework Code First进行以下映射?

public class Parent
{
     [Key]
     public int ID {get; set;}
     public string statecode{get; set;}

     public virtual ICollection<Child> children{get; set;}
}

public class Child
{
    [Key, Column(Order = 0)]
    public string StateFromCode { get; set; }
    [Key, Column(Order = 1)]
    public string StateToCode { get; set; }
}

我想在我的 dbcontext 中指定一个关系,其中子项被延迟加载到 Parent 和 Parent.statecode == Child.StateToCode。请注意,StateToCode 是子键的一部分,而不是整个主键。如果可能的话,我应该在下面的数据库上下文中指定什么来实现这一点?

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Parent>().HasMany(x=>x.children)..............

    }

【问题讨论】:

    标签: entity-framework-4 frameworks ef-code-first entity


    【解决方案1】:

    这是不可能的——尤其是在代码优先的情况下,关系必须遵循与在数据库中指定引用约束完全相同的规则。因此,唯一有效的关系需要Child 表中的Parent 的Id 列和该列的外部约束

    【讨论】:

    • 感谢您的回答。我最终将子集合手动填充为“p.children = dbcontext.Children.where(c=>c.StateToCode == p.statecode)”并将集合从 ICollection 更改为 [NotMapped] IEnumerable
    • 现在还是这样,还是新版本提供了这个功能?
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多