我正在尝试使用以下代码播种数据库:
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; }
}