使用EF6 Framework4.5 - 创建我的第一个n层应用程序和第一个EF体验。我有CRUD工作,但有一个问题,我有一个工作,但不喜欢它。肯定有更好的办法。
当数据对象从我的UI层返回到DAL层时,它已被分离,因此我将EntityState标记为“已修改”。但随后它会更新数据库中的所有列。未在表单视图中加载(未提交)的值显然为null,并在db。中更新为<。
1)我的第一个解决方案确实有效: 将对象存储在UI层中的会话中,并在提交表单时循环访问更新已编辑值的对象。因此,原始值不加改变地传回并更新为原始值。我认为这不是最佳做法。
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
答案 0 :(得分:0)
试试这个架构。因此,如果您使用EF,那么我认为您已更新edmx并正确表示您的数据库对象。
例如:假设您要更新客户表中的客户数据
创建一个Customer类。
当您提取特定客户时,请获取实例 客户创建。
将此实例传递给用户界面
并将实例传递回Business层以保存