2016-07-10 5 views
0

ItemというドメインとCategoryというドメインがあります。私はCategoryIdと呼ばれる別のプロパティを追加しました私はItemにカテゴリのPKを追加したいが、私はEFで6Entity Frameworkドメイン間の参照を作成する

public class Item 
{ 
    [Key] 
    public Guid Id { get; set; } = GuidCombGenerator.GenerateComb(); 
    public string Name { get; set; } 
    public Category Category { get; set; } 
} 

public class Category 
{ 
    [Key] 
    public Guid Id { get; set; } = GuidCombGenerator.GenerateComb(); 
    public string Name { get; set; } 
    public virtual ICollection<Item> Items { get; set; } = new List<Item>(); 
} 

これを行う方法がわからないです私はこの

var item = new Item 
       { 
        CategoryId = dto.CategoryId , 
        Name = dto.Name.Trim(), 
       }; 

dbContext.StorageItems.Add(item); 
dbContext.SaveChanges(); 

を行うことができると思いましたこれを正しいIdと入力してください。しかし、これは行くだけでなく、新しいCategoryエントリを2つをリンクするのではなく。

私はこれを行うことができると思ったが、おそらく私はそれをNHibernateと混ぜている。それがすべてで、これを好きではない

var item = new item 
       { 
        Category = new Category { Id = dto.CategoryId, }, 
        Name = dto.Name.Trim(), 
       }; 

dbContext.StorageItems.Add(item); 
dbContext.SaveChanges(); 

私は、これは(これは働くだろうとは思いませんでした)みました。

私が考えることのできる唯一の選択肢は、dbに行き、Categoryオブジェクトを戻してItemに追加することですが、私はすでに知っているIDを取得するためにdbへの移動を防ぎたいと思います。

+0

があなたをしたん'Category'プロパティを' virtual'にしてみてください。また、カスタムguid IDジェネレータ関数を使用していますか?それはまったく正しいとは思われません...独自のIDを作成する場合は、属性[DatabaseGenerated(DatabaseGeneratedOption.None)]を主キーに追加する必要があります。私はあなたの主キーの自動設定プロパティを使用して問題を引き起こしていると思います。 –

答えて

0

Category仮想にマークしてCategoryIdプロパティを作成し、Categoryの外部キーを指定します。これにより

public class Item 
{ 
    [Key] 
    public Guid Id { get; set; }; 
    public string Name { get; set; } 
    public Guid CategoryId { get; set; } 
    [ForeignKey("CategoryId")] 
    public virtual Category Category { get; set; } 
} 

あなたがCategoryプロパティまたは参照を「タッチ」しない限り、あなたの最初のコードは、(直接Idを割り当てる)動作するはずです。これが機能するために

、また、あなたがEFを聞かせて、何もカスタムにごIdプロパティを設定していない作るあなたはコンテキスト

に無効プロキシを持っていないことを確認し、その仕事

関連する問題