[英]EF Core 3.0 adding connected entity to collection fails in One To Many relationship
我尝试通过collection的navigation属性添加实体,但是出现以下消息:
“数据库操作预期会影响1行,但实际上会影响0行。自从加载实体以来,数据可能已经被修改或删除。有关的信息,请参见http://go.microsoft.com/fwlink/?LinkId=527962(页面可能为英文)。有关了解和处理乐观并发异常的信息。”
这些模型是:
RecommendationGroupDb:
public class SuggestionGroupDb
{
public Guid Id { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual TeguUserDb User { get; set; }
[Required(AllowEmptyStrings=false, ErrorMessage = "Required")]
[StringLength(30, MinimumLength = 1, ErrorMessage = "Invalid")]
public string Name { get; set; }
public int OrderNo { get; set; }
public virtual ICollection<SuggestionItemDb> Items { get; set; }
}
RecommendationionItemDb:
public class SuggestionItemDb
{
public Guid Id { get; set; }
[Required]
public Guid SuggestionGroupId { get; set; }
[ForeignKey("SuggestionGroupId")]
public virtual SuggestionGroupDb SuggestionGroup { get; set; }
[Required(AllowEmptyStrings=false, ErrorMessage = "Required")]
[StringLength(30, MinimumLength = 1, ErrorMessage = "Invalid")]
public string Name { get; set; }
public int OrderNo { get; set; }
}
建议组存储库更新功能(已简化):
public async Task<SuggestionGroupRepositoryResult> UpdateAsync(string userid, SuggestionGroupDb suggestiongroup)
{
// Step 01 - Get the Entity
var dbSuggestionGroup = await GetAsync(userid, suggestiongroup.Id, suggestiongroup.Name);
// Step 02 - Update the items (just add one now)
foreach (var item in suggestiongroup.Items)
{
var sidb = new SuggestionItemDb() {Id = item.Id, Name = item.Name, OrderNo = item.OrderNo, SuggestionGroupId = item.SuggestionGroupId};
dbSuggestionGroup .Items.Add(sidb);
}
// Step 03 - Update the changes
try
{
var updated = context.AccSuggestionGroups.Update(dbSuggestionGroup);
await context.SaveChangesAsync();
return new SuggestionGroupRepositoryResult("Valid") /*{SuggestionGroup = updated.Entity}*/;
}
catch (Exception e)
{
context.Reset();
return new SuggestionGroupRepositoryResult("Failed", e.Message);
}
}
问题在于,SaveChanges会引发给定消息并发生异常。 是否可以通过意见建议组更新意见建议项?
我正在使用EF Core 3.0预览版6。
在EF Core 3.0之前,通过DetectChanges
策略发现的未跟踪实体(在您的情况下,是通过将未跟踪实体添加到集合中)将自动处于“已Added
状态。
这已不再是这种情况。 从Entity Framework Core 3.0开始,该实体将自动以“已Modified
状态添加。
为什么
进行此更改是为了在使用商店生成的键时更轻松,更一致地使用断开的实体图。
资料来源: EF Core 3.0-重大变化
您可以通过将key属性配置为显式不使用生成的值来强制将新的未跟踪实体添加为“已Added
状态。
例如:
public class SuggestionItemDb
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
}
或使用流畅的API
modelBuilder
.Entity<SuggestionItemDb>()
.Property(e => e.Id)
.ValueGeneratedNever();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.