【问题标题】:Prevent null updates in detached entity framework objects防止分离实体框架对象中的空更新
【发布时间】:2014-04-19 04:16:24
【问题描述】:

使用 EF6 Framework4.5 – 创建我的第一个 n 层应用程序和第一次 EF 体验。我有 CRUD 工作,但有一个问题是我有一个解决方法但不喜欢它。一定会有更好的办法。

当数据对象从我的 UI 层返回到 DAL 层时,它已被分离,因此我将 EntityState 标记为“已修改”。但随后它会更新数据库中的所有列。未在表单视图中加载(且未提交)的值显然为 null 并在 db 中更新为此类。

1) 我的第一个解决方案确实有效: 将对象存储在 UI 层的 session 中,并在提交表单时循环通过对象更新编辑值。因此,原始值被原封不动地传回并更新为原始值。不过,我认为这不是最佳做法。

2) 我认为我想要的解决方案: 我正在 DAL 层中寻找一个辅助函数来遍历返回对象中的所有值,并在调用 SaveChanges 之前仅将非空值标记为“IsModified”。

我在 C# 中找到了有关如何检查更改值但不检查 null 的示例。 (反正我还是个vb人。不要讨厌。)


A) 解决方案 #2 是一个好方法吗?

B) 有没有人能帮帮我?

谢谢。

顺便说一句,这是我迄今为止最好的尝试:(“CurrentValues”上的错误)

Public Overridable Function MarkEntriesModified(entity As Object)

    Dim dbEntityEntry = DbContext.Entry(entity)

    'Ensure only non-null values are inserted
    For Each [property] In dbEntityEntry.CurrentValues.PropertyNames
        If Not IsDBNull(dbEntityEntry.CurrentValues.GetValue(Of Object)([property])) Then
            dbEntityEntry.[Property]([property]).IsModified = True
        End If
    Next
    Return entity

【问题讨论】:

    标签: asp.net linq-to-entities entity-framework-6 n-tier-architecture


    【解决方案1】:

    试试这个架构。因此,如果您使用的是 EF,那么我想您已经更新了 edmx 并正确地表示了您的数据库对象。

    例如:假设您要更新客户表中的客户数据

    • 创建一个客户类。

    • 当您提取特定客户时,获取
      客户创建。

    • 将此实例传递给 UI

    • 并将实例传回业务层保存

    这样你就不会在两者之间丢失任何东西。

    some sample code

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多