实体未更新
Entities are not updated
当我想更新实体时,EntityFraemwork 出现了一个奇怪的问题。
我有 User 实体和 Searchfilter 实体,它们是一对多关系
public class User : IdentityUser
{
public virtual List<SearchFilter> SearchFilters { get; set; }
}
public class SearchFilter : BaseEntity, IAggregateRoot
{
public virtual User User { get; set; }
}
1 - 我创建用户
2 - 我 运行 创建用户并将其添加到 searchfilter
的方法
SearchFilter searchFilter = SearchFilterRepository.AddAsync(new SearchFilter
{
SearchInDescription = false,
SearchInTitle = false
}).Result;
我使用了没有异步的结果进行了测试。我认为问题出在 EF 中的异步操作中。
那么:
searchFilter.User = user;
SearchFilterRepository.Update(searchFilter);
更新:
public void Update(T entity)
{
_dbMainContext.Entry(entity).State = EntityState.Modified;
_dbMainContext.SaveChanges();
}
我有一个错误:违反了“PK_AspNetUsers” PRIMARY KEY 约束。无法将重复键插入 dbo.AspNetUsers 对象。重复键值:(0e535b73-7cff-4152-9157-214b9821d264)。
该指令的执行已被中断。
我认为 EF、更新 SearchFilter 和添加新用户已经存在,我该如何避免这种情况?
添加 UserId 属性 并使用它代替引用用户 属性
public class SearchFilter : BaseEntity, IAggregateRoot
{
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
然后使用插入或更新
searchFilter.UserId = /* Add User Guid */;
SearchFilterRepository.Update(searchFilter);
当我想更新实体时,EntityFraemwork 出现了一个奇怪的问题。 我有 User 实体和 Searchfilter 实体,它们是一对多关系
public class User : IdentityUser
{
public virtual List<SearchFilter> SearchFilters { get; set; }
}
public class SearchFilter : BaseEntity, IAggregateRoot
{
public virtual User User { get; set; }
}
1 - 我创建用户 2 - 我 运行 创建用户并将其添加到 searchfilter
的方法SearchFilter searchFilter = SearchFilterRepository.AddAsync(new SearchFilter
{
SearchInDescription = false,
SearchInTitle = false
}).Result;
我使用了没有异步的结果进行了测试。我认为问题出在 EF 中的异步操作中。 那么:
searchFilter.User = user;
SearchFilterRepository.Update(searchFilter);
更新:
public void Update(T entity)
{
_dbMainContext.Entry(entity).State = EntityState.Modified;
_dbMainContext.SaveChanges();
}
我有一个错误:违反了“PK_AspNetUsers” PRIMARY KEY 约束。无法将重复键插入 dbo.AspNetUsers 对象。重复键值:(0e535b73-7cff-4152-9157-214b9821d264)。 该指令的执行已被中断。
我认为 EF、更新 SearchFilter 和添加新用户已经存在,我该如何避免这种情况?
添加 UserId 属性 并使用它代替引用用户 属性
public class SearchFilter : BaseEntity, IAggregateRoot
{
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
然后使用插入或更新
searchFilter.UserId = /* Add User Guid */;
SearchFilterRepository.Update(searchFilter);