繁体   English   中英

实体框架投影或

[英]Entity framework projection or

假设我有使用EF Model First方法设计的Db现有应用程序。 我有Users表,当客户端代码尝试从Users表中读取条目时,DAL逻辑将EF实体投影到普通对象(这只是简单的C#类,我们将其称为UserEntry类)。

现在,我应该添加Update方法,该方法需要UserEntry类。 因此,我只是想知道如何跟踪UserEntry类中的哪些字段已更改?

当然,我可以保存所有数据,但是我没有这种方法。

我可以完全重构现有解决方案,甚至可以删除UserEntry类。 我应该选择哪种方法? 使用DbContext生成器生成POCO类,或者使用EF Power Tools生成POCO类,然后转到“代码优先”方法?

我不知道您使用的是什么版本的EF,所以我假设您可以使用DbContext,如下所示:

public class YourContext : DbContext
{
    public DbSet<User> Users {get;set;}
}

首先,您使用这种方法加载用户,以便DbContext跟踪它:

YourContext db = new YourContext();

public User Get(int userId)
{
    return db.Users.Find(userId);
}

现在它在内存中,您可以对返回的对象进行操作。 完成对它的干预后,您只需致电:

db.SaveChanges() 

并且它将保存跟踪的所有更改,而无需特殊的Update方法。

但是,如果您正在使用断开连接的实体(网站等),则需要添加其他行,以告知DbContext当实体超出跟踪范围时,该实体已更改:

public void Update(User user)
{
    db.Entry(user).State = EntityState.Modified;
    db.SaveChanges();
}

那几乎就是您所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM