实体框架核心创建多对多关系
我已经使用ef-core创建了多对多的关系,它绝对有效,我能够在数据库中创建每个项目并创建关系。但是我这样做的方式有点冗长。 intellisense中的对象似乎也有错误的属性(我会在下面解释更多)。我想知道是否有不同的方式。实体框架核心创建多对多关系
这里是我的实体
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为你正确的值进行配置。
您不需要交易,因为如果遇到错误,单个SaveChanges
调用将自动触发一个事务,该事务将回滚所有修改。
以上是 实体框架核心创建多对多关系 的全部内容, 来源链接: utcz.com/qa/259681.html