设置导航属性不设置外键

时间:2014-05-08 17:10:01

标签: c# entity-framework

我正在尝试使用以下代码播种数据库:

private static Contact ContactCreate(DbContext ctx, Company Company, string Description) {
    var contact = ctx.Contacts.Create();

    contact.Description = Description;

    contact.Company = Company;         // #1

    ctx.Contacts.AddOrUpdate(c => c.Description, contact);
    ctx.SaveChanges();

    return ctx.Contacts.First(c=>c.Description == Description);
}

保存更改时失败,因为未设置contact.CompanyId,并且不满足外键约束。如果我在下一行更改第1行,则代码执行正确:

    contact.CompanyId = Company.Id;    // #2 

这是通常的行为吗?

当导航属性“公司”时需要外键“CompanyId”吗?

我认为这是重复的,因为EntityFramework知道“公司”中的关键属性是什么,应该为您管理。

编辑:这是从模型第一种方法生成的代码

public partial class Contact : IAuditable
{
    public int Id { get; set; }
    public string Description { get; set; }
    public int CompanyId { get; set; }

    public virtual Company Company { get; set; }
}

public partial class Company : IAuditable
{
    public Company()
    {
        this.Contacts = new HashSet<Contact>();
    }

    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Contact> Contacts { get; set; }
    public virtual Contact Contact { get; set; }
}

0 个答案:

没有答案