实体框架核心创建多对多关系

我已经使用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)

{

}

}

这工作得很好,但同样它似乎有点多。而现在,每当我使用DisplayItemDisplayGroup时,对象内总是有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为你正确的值进行配置。

您不需要交易,因为如果遇到错误,单个SaveChanges调用将自动触发一个事务,该事务将回滚所有修改。

以上是 实体框架核心创建多对多关系 的全部内容, 来源链接: utcz.com/qa/259681.html

回到顶部