0

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

现在我应该添加 Update 方法,它采用 UserEntry 类。所以我只是想知道我应该如何跟踪 UserEntry 类中更改了哪些字段?

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

我可以完全重构现有的解决方案,甚至可以删除 UserEntry 类。我应该选择什么方法?使用 DbContext 生成器生成 POCO 类,或者例如使用 EF Power Tools 并转向 Code First 方法?

4

1 回答 1

0

我不知道您使用的是哪个版本的 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() 

它会将跟踪的任何内容保存为更改,无需特殊的更新方法。

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

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

这几乎就是你所需要的。

于 2012-05-05T13:25:08.297 回答