实体框架投影或

本文关键字:投影 框架 实体 | 更新日期: 2023-09-27 18:33:07

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

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

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

我可以完全重构现有解决方案,甚至可以删除 UserEntry 类。我应该选择什么方法?使用 DbContext 生成器生成 POCO 类,或者例如使用 EF Power Tools 并迁移到代码优先方法?

实体框架投影或

我不知道

你使用的是哪个版本的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();
}

这几乎就是您所需要的一切。