【问题标题】:Codefirst foreign key name has repeated table name - how to set explicitly?Codefirst 外键名有重复的表名 - 如何显式设置?
【发布时间】:2011-08-21 17:03:39
【问题描述】:

我有 2 张桌子: 1) 家长 2) 孩子

在codefirst中我有以下定义:

public class Parent 
{
    public int ParentId { get; set; }
    public ICollection<Child> child { get; set; }
}

但是在 db 中,子表定义了以下外键:

ParentParentId (FK, int, NULL)

如何确保它只在外键中指定 ParentId?是否需要使用fluent配置显式设置父键?

【问题讨论】:

    标签: mapping ef-code-first entity-framework-4.1


    【解决方案1】:

    是的,您必须在子实体中包含外键属性:

    public class Child
    {
        public int ChildId { get; set; }
        public int ParentId { get; set; } // FK
        public virtual Parent { get; set; }
    }
    

    或者您必须使用 fluent API 重命名该列:

    modelBuilder.Entity<Child>()
                .HasRequired(c => c.Parent)
                .WithMany(p => p.Childs)
                .Map(m => m.MapKey("ParentId"));
    

    【讨论】:

    • 太棒了!我使用了第一种解决方案。 “虚拟”关键字的意义是什么?我还注意到第二个解决方案不起作用,Map() 方法不能使用 WithMany()。我只有 HasForeignKey、IsIdependent 和 WillCascadeOnDelete 方法,没有 Map()!
    • 您没有先使用最新版本的 EF 代码。这就是您看不到Map 而看到IsIndependent 的原因。 virtual 的原因是启用 Parent 的延迟加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2016-07-19
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多