【问题标题】:Can I use Entity Framework to track changes like DataSet (without connecting to database)?我可以使用 Entity Framework 来跟踪 DataSet 之类的更改(无需连接到数据库)吗?
【发布时间】:2019-08-10 00:40:54
【问题描述】:

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

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

现在 DataSet 有变化,但我可以重置它们:

dataSet.AcceptChanges();

然后,当用户更改某些内容时,我可以使用以下方法跟踪更改:

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

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

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

这是否可以在不打开数据库连接的情况下使用由 EF 生成的模型和类?

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

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

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

    dbContext.MyTable.Attach(myRow);
    

    这将添加 EntityState 为 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

    【讨论】:

    • “您可能需要将实体状态更改为已添加”,这正是我对数据集所做的:)。谢谢您的回答。你知道如何以编程方式设置连接参数并从 App.config 中移除实体框架配置吗?
    • @marbel82 试试这个:stackoverflow.com/questions/34350851/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2017-07-24
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多