c# - 使用实体框架更新记录的最佳方式
问题描述
我想使用实体框架更新我的表。但是,我得到一个错误。
我的EfRepositoryBase
班级正在实施IEntityRepository
。这种方法有什么问题?
public bool UpdateWithProperty(TEntity entity, params Expression<Func<TEntity, object>>[] properties)
{
using (var context = new TContext())
{
context.Set<TEntity>().Attach(entity);
var updatedEntity = context.Entry(entity);
foreach (var property in properties)
{
updatedEntity.Property(property).IsModified = true;
}
updatedEntity.State = EntityState.Modified;
context.SaveChanges();
}
return true;
}
错误:
无法将值 NULL 插入到列 'UserName'、表 'Nextt.dbo.Users' 中;列不允许空值。更新失败。
解决方案
你可以这样使用。
db.context.Attach(obj);
DbEntityEntry entry = db.Entry(obj);
foreach (var proprty in entry.OriginalValues.PropertyNames)
{
if(entry.CurrentValues.GetValue<object>(proprty) != null)
if (!object.Equals(entry.GetDatabaseValues().GetValue<object>(proprty), entry.CurrentValues.GetValue<object>(proprty)))
{
entry.Property(proprty).IsModified = true;
}
}
db.SaveChanges();
推荐阅读
- shopify - 如何在shopify中使用结帐json参数将“继续付款”重定向到另一个网址
- java - 如何在 grails 中设置与 MySQL 的 SSL 连接(双向身份验证)?
- algorithm - 以最小分数约束作为团队寻找最优路径和循环的算法
- android - 如何实现searchable.xml?
- database - 以体重为指标的比赛
- asp.net - 如何在 ASP.NET MVC 中路由表单
- powerapps - PowerApps 中的离线功能
- ios - 如何在 admob 中禁用 IDFA 使用
- java - 如果用户继续输入无效输入,如何继续要求输入整数
- python-3.x - 数据框爆炸并使用正确的数据进行映射