我在VB MV4项目中使用EntityFrameWork 5。
我有一个从EntityFramework图构建的数据库(模型firt而不是代码优先)
我有一个ViewModel X,包含一个List(ofT)T是我实体上的一个
当我打开我的Web应用程序(在浏览器上)时,我要求控制器给我ViewModel X作为Json对象,我用它来使用Knockout JS Mapping插件填充MVVC(淘汰模型)。
当我要求模型时,我使用类似于下面显示的代码填充它
Public Class DataServiceController
Inherits System.Web.Mvc.Controller
<Authorize()> _
Public Function RetrieveData() As JsonResult
Dim model As ViewModelX
model = New ViewModelX
'=====================================
' Resources and Tools
'=====================================
Dim fetchedResourceAndToolsQuery = From a In db.ResourceAndTools
Where a.ProfileId = profile.ProfileId Select a
For Each eachRes In fetchedResourceAndToolsQuery
Dim res As ResourceAndTools = New ResourceAndTools
res.Name = Trim(eachRes.Name)
res.URL = Trim(eachRes.URL)
res.Target = eachRes.Target
res.ResourceId = eachRes.ResourceId
model.ResourceAndTools.Add(res)
Next
Return Json(model, JsonRequestBehavior.AllowGet)
Everthing很棒!除了......这就是问题
如上所述,ViewModelX包含一个List(of T)T ResourceAndTools
是否有人将fetchedResourceAndToolsQuery(Linq查询的结果)的内容复制(克隆,加载,不确定该术语)到model.ResourceAndTools(List(of T))而不实例化新对象并复制我正在做的属性。
我已经进行了修改(克隆,深度复制,浅层复制等)我最接近解决方案是关于如何深度复制对象的一些解释,但它依赖于序列化,它不起作用,因为并非所有属性实体框架对象是可序列化的。
感谢任何帮助 谢谢
答案 0 :(得分:3)
喜欢这个吗?
model.ResourceAndTools = (
From a In db.ResourceAndTools
Where a.ProfileId = profile.ProfileId
Select New ResourceAndTools() With { _
.Name = Trim(a.Name), _
.URL = Trim(a.URL), _
.Target = a.Target, _
.ResourceId = a.ResourceId}).ToList()
根据你的评论,也许你可以做到,
Dim dataList = (
From a In db.ResourceAndTools
Where a.ProfileId = profile.ProfileId
Select New With
{
.Name = Trim(a.Name),
.URL = Trim(a.URL),
.Target = a.Target,
.ResourceId = a.ResourceId
}).ToList()
model.ResourceAndTools = dataList.ConvertAll(Function(data)
Return New ResourceAndTools() With
{
.Name = data.Name,
.Url = data.Url,
.Target = data.Target,
.ResourceId = data.ResourceId
}
End Function)