实体框架投影或
本文关键字:投影 框架 实体 | 更新日期: 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();
}
这几乎就是您所需要的一切。