首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >实体框架4.1代码的第一个外键Id

实体框架4.1代码的第一个外键Id
EN

Stack Overflow用户
提问于 2011-04-14 05:54:45
回答 3查看 32.7K关注 0票数 20

我有两个一对多引用的实体。当实体框架创建表时,它创建了两个外键,一个用于我用fluent接口指定的键,另一个用于ICollection。如何去掉重复的外键?

代码语言:javascript
复制
public class Person
{
    public long RecordId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string Username { get; set; }

    public long DepartmentId { get; set; }
    public virtual Department Department { get; set; }
}

public class Department
{
    public long RecordId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Person> People { get; set; }
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Person>()
        .HasRequired(p => p.Department)
        .WithMany()
        .HasForeignKey(p => p.DepartmentId)
        .WillCascadeOnDelete(false);
}

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-14 06:58:09

您必须显式指定关联的多端:

代码语言:javascript
复制
modelBuilder.Entity<Person>()
    .HasRequired(p => p.Department)
    .WithMany(d => d.People)
    .HasForeignKey(p => p.DepartmentId)
    .WillCascadeOnDelete(false);

否则,EF将假设有两个关联:一个没有在Department中公开,正如您在Fluent代码中定义的那样,在Person类中具有外键DepartmentId和导航属性Department -另一个关联属于公开的导航属性People,但在Person中与另一个未公开的端以及EF自动创建的外键相关联。这是您在数据库中看到的另一个键。

票数 27
EN

Stack Overflow用户

发布于 2011-04-14 06:04:43

默认的Code First约定检测您的DepartmentId外键,因为它是常规的。我认为你应该去掉流畅的定义:

代码语言:javascript
复制
modelBuilder.Entity<Person>()
    .HasRequired(p => p.Department)
    .WithMany()
    .WillCascadeOnDelete(false);
票数 7
EN

Stack Overflow用户

发布于 2012-12-18 16:32:29

最好的方法是从Person类中删除departmentid属性,并添加以下语句。MapKey将使用您指定的名称创建外键列

代码语言:javascript
复制
 modelBuilder.Entity<Person>().HasRequired(p =>  p.Department)
    .WithMany().Map(x=>x.MapKey("DepartmentId"))
    .WillCascadeOnDelete(false);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5656159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档