我正在使用EF 4.4 + Code First。
我试图将ChartofAccount实体添加到DBContext并填写公司的密钥,但它要求我在验证时填写公司的CompanyName。我以为DBContext会为我查找联营公司,而不是试图添加新的公司?
public class ChartofAccount: MasterData
{
public ChartofAccount()
{
Company = new Company();
Category1 = new AccountCatagory();
Category2 = new AccountCatagory();
}
[Key]
[Required]
public string Code { get; set; }
public virtual Company Company { get; set; }
[Required]
public string AccountName { get; set; }
[Required]
[StringLength(3)]
public string AccountCurrency { get; set; }
public virtual AccountCatagory Category1 { get; set; }
public virtual AccountCatagory Category2 { get; set; }
public string Reference { get; set; }
public bool HasTransaction { get; set; }
}
public class Company : MasterData
{
[Key]
public int Id { get; set; }
[Required]
public string CompanyName { get; set; }
[Required]
DateTime CurrentAccountPeriod { get; set; }
[Required]
[StringLength(3)]
public string BaseCurrencyCode { get; set; }
}
答案 0 :(得分:1)
可悲的是,仅仅相关实体的主键是不够的。您需要往返数据库以获取相同数据上下文中的实体。
示例:
var Company = db.Company.Single(d => d.ID == id);
ChartofAccountToAdd.Company = Company;
db.ChartofAccount.Add(ChartofAccountToAdd);
db.SubmitChanges();
这将与现有公司建立关系。
编辑:
当我回答时,我完全忘记了这一点。编辑您的ChartOfAccount
模型以包含Company
的外键,如:
public class ChartofAccount: MasterData
{
{rest of your model}
public int CompanyID { get; set; }
}
然后将外键设置为新的int
属性。实体框架将创建关系而不会出现任何问题。不要在模型上的Company
属性中设置任何内容。