0

我正在使用 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; }
    }
4

1 回答 1

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为模型上的属性设置任何内容。

于 2013-05-14T01:23:55.627 回答