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
メソッドが成功して実行されると、その後ItemId
とGroupId
プロパティはEFであなたのための正しい値で構成されます。
私は自分のコメントを削除し、別の質問@CodeNotFound –