1 回答
TA贡献1833条经验 获得超4个赞
问题将与您在许可证中的用户参考有关。这是从 Owin 上下文中检索到的,但您正在尝试将其保存/关联到您的许可证上下文。
我将更新该方法以简单地接受用户 ID,然后从您的许可证上下文加载并关联用户。
public async Task AddRangeAsync(IEnumerable<LicenseViewModel> models, int ownerId)
{
var list = new List<License>();
var owner = context.Users.Single(x => x.UserId == ownerId);
foreach (var model in models)
{
list.Add(new License
{
ExpiryDate = model.ExpiryDate,
Name = model.Name,
User = owner
});
}
context.Licenses.AddRange(list);
await context.SaveChangesAsync();
}
那应该可以解决您的问题。偷偷摸摸的小细节。:)
为了避免负载,您可以使用:
var owner = context.Owners.Local.SingleOrDefault(x => x.UserId == ownerId);
if (owner == null)
{
owner = new User{UserId = ownerId};
context.Users.Attach(owner);
}
// ...
我可能会考虑将其放在基类方法中以从上下文中检索所有者引用。该方法的警告是,除非您从数据库显式加载,否则此上下文中的用户将不包含有关用户的详细信息。(即名称等)因此,只要团队知道不相信上下文将具有完整的用户,除非明确重新加载,就可以从性能 PoV 中获得。
- 1 回答
- 0 关注
- 89 浏览
添加回答
举报