ef怎么实现只更新指定字段?

lyiverson lyiverson 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在网上找了个EF的EntityRepository,自己改了改,在实际使用中发现,不能更新指定的字段,我想自己写一个方法,但总是报错。刚学EF请大能之士,帮我看看。指点一二呀。
这是我的代码,最后一个方法是我写的方法,总是报错。

namespace Model.EF
{
public class EntityRepository<TEntity> : IRepository<TEntity>
where TEntity : class, IEntity
{
private readonly NerdDinners m_dbContext;
private ObjectContext context;
public EntityRepository()
{
m_dbContext =new NerdDinners();
}

protected virtual void OnLoaded(TEntity entity)
{

}

protected DbSet<TEntity> DbSet
{
get { return m_dbContext.Set<TEntity>(); }
}

public IEnumerable<TEntity> FindAll()
{
return DbSet;
}
public List<TEntity> FindBy(string where)
{

var list = DbSet.SqlQuery(where);
return list.ToList();
}
public List<TEntity> FindPageList(string where, int pageIndex, int pageSize, out int totalRecord)
{
totalRecord = 0;

var list = DbSet.SqlQuery(where).Skip((pageIndex - 1) * pageSize).Take(pageSize);
totalRecord = DbSet.SqlQuery(where).Count();
return list.ToList();
}

public TEntity FindById(int id)
{
return DbSet.SingleOrDefault(entity => entity.ID== id);
}

public void Add(TEntity entity)
{

DbSet.Add(entity);
m_dbContext.SaveChanges();
}

public void Delete(TEntity entity)
{
var entry = m_dbContext.Entry(entity);
if (entry.State == EntityState.Detached)
{

//DbSet.Attach(entity);
entry.State = EntityState.Deleted;
//var entityToUpdate = FindById(entity.Id);
//EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TEntity>().Map(entity, entityToUpdate);
}
m_dbContext.SaveChanges();
}

public void Update(TEntity entity)
{

var entry = m_dbContext.Entry(entity);

if (entry.State == EntityState.Detached)
{
//DbSet.Attach(entity);
entry.State = EntityState.Modified;
//var entityToUpdate = FindById(entity.Id);
//EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TEntity>().Map(entity, entityToUpdate);

}

m_dbContext.SaveChanges();
}
public void Update(TEntity entity, params string[] fileds)
{
var entry = m_dbContext.Entry(entity);

Type Ttype = typeof(TEntity);


var entityToUpdate = FindById(entity.ID);
context.AttachTo(Ttype.Name, entityToUpdate);
var stateEntry = context.ObjectStateManager.GetObjectStateEntry(entity);

for (int i = 0; i < fileds.Length - 1; i++)
{
stateEntry.SetModifiedProperty(fileds[i]);
}


m_dbContext.SaveChanges();
}
}
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
lyiverson
LINQ 8,492 成员 4,736 内容