0

EF 4.4 + Code First を使用しています。

Company のキーを入力して ChartofAccount エンティティを DBContext に追加しようとしましたが、検証時に Company の 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プロパティに設定します。Entity Framework は問題なくリレーションシップを作成します。Companyモデルのプロパティには何も設定しないでください。

于 2013-05-14T01:23:55.627 に答える