2017-12-03 9 views
0

ef-coreを使用して多対多リレーションシップを作成しましたが、これは間違いなく動作し、データベース内の各アイテムを作成してリレーションシップを作成できます。しかし、私がやっているやり方は少し冗長です。また、インテリセンスでオブジェクトに誤ったプロパティがあるように思われます(詳細は以下で説明します)。私は別の方法があるのだろうかと思っています。ここでEntity Frameworkコア多対多リレーションシップの作成

は私のエンティティ

DisplayItem.cs

public class DisplayItem 
    { 
     [Key] 
     public int ItemId { get; set; } 
     [Required] 
     public string Description { get; set; } 
     [Required] 
     public string FileType { get; set; } 
     [Required] 
     public string FileName { get; set; } 
     [Required] 
     public byte[] Item { get; set; } 


     public ICollection<LookUpGroupItem> LookUpGroupItems { get; set; } 
    } 

DisplayGroup.cs

public class DisplayGroup 
    { 
     [Key] 
     public int GroupId { get; set; } 
     public string Description { get; set; } 
     [Required] 
     public string Name { get; set; } 

     public ICollection<LookUpGroupItem> LookUpGroupItems { get; set; } 
    } 

関係エンティティです

LookUpGroupItem.cs

///naming convention will be each entity in the relationship following LookUp 
public class LookUpGroupItem 
    { 
     public int ItemId { get; set; } 
     public DisplayItem DisplayItem { get; set; } 
     public int GroupId { get; set; } 
     public DisplayGroup DisplayGroup { get; set; } 
    } 

モデル構築ロジックが正しいと仮定します。 それぞれを作成してから参照関係を作成するために使用するコードは次のとおりです。

DisplayLookUpInteraction.cs

public void Create(DisplayGroup g, DisplayItem d) 
    { 
     using (var transaction = _dataContext.Database.BeginTransaction()) 
      try 
      { 
       _dataContext.Add(d); 
       _dataContext.Add(g); 
       _dataContext.SaveChanges(); 
       LookUpGroupItem l = new LookUpGroupItem() { GroupId = g.GroupId, ItemId = d.ItemId }; 
       _dataContext.Add(l); 
       _dataContext.SaveChanges(); 
       transaction.Commit(); 
      } 
      catch (Exception ex) 
      { 

      } 
    } 

これは正常に動作しますが、やはりそれは少しくらいのようです。そして今、私がDisplayItemまたはDisplayGroupを使って作業するときは常にオブジェクト内にICollection<LookUpGroupItem>のプロパティがあります。これは何のため?

try 
{ 
    LookUpGroupItem l = new LookUpGroupItem 
    { 
     DisplayGroup = g, 
     DisplayItem = d 
    }; 
    _dataContext.Add(l); 
    _dataContext.SaveChanges(); 
} 
catch (Exception ex) 
{ 
    // handle the error 
} 

SaveChangesメソッドが成功して実行されると、その後ItemIdGroupIdプロパティはEFであなたのための正しい値で構成されます。

答えて

1

あなたは、単にこのようにそれを行うことができます。

単一のSaveChangesコールでは、エラーが発生した場合にすべての変更をロールバックするトランザクションが自動的にトリガーされるため、トランザクションは必要ありません。

+0

私は自分のコメントを削除し、別の質問@CodeNotFound –

関連する問題