我可以使用实体框架跟踪数据集之类的更改(无需连接数据库)吗?

时间:2019-08-09 13:06:27

标签: c# entity-framework

我使用DataSet写入桌面WPF应用程序中的数据库。

我为一个包含多个不同文档的测量窗口创建一个数据集。 我添加一些起始数据(向几张表中添加新行),然后将其绑定到适当的字段(TextBoxes,CheckBoxes)。

现在数据集已更改,但我可以重置它们:

dataSet.AcceptChanges();

然后,当用户进行更改时,我可以使用以下方法跟踪更改:

dataSet.HasChanges();
dataSet.GetChanges();

我想将应用程序转移到实体框架。

我发现我可以绑定到dbContext.MyTable.Local,并通过dbContext.ChangeTracker.HasChanges()检查更改。但是,我找不到添加一些数据并重置HasChanges()状态的方法。

是否可以使用EF生成的模型和类而无需开放连接到数据库?

我应该建立自己的模型并仅将EF用于写入数据库吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Attach方法将实体添加到上下文:

dbContext.MyTable.Attach(myRow);

这将添加实体状态为Unchanged的实体:

dbContext.Entry(myRow).State == EntityState.Unchanged;

将更改应用于实体后,实体跟踪器将检测到这些更改:

dbContext.ChangeTracker.HasChanges()

但是,由于您的实体并非真正来自数据库,因此如果您想插入这些记录,则可能需要将实体状态更改为“已添加”,然后dbContext.SaveChanges()将处理其余记录。

if(dbContext.ChangeTracker.HasChanges())
{
    dbContext.Entry(myRow).State = EntityState.Added;
    dbContext.SaveChanges();
} 

有关更多信息,请参见this post

HTH