【发布时间】: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