因此,我对使用实体框架设计器制作 EDMX 来充当 MVVM 项目中的模型已经很感兴趣了。
我刚刚遇到一个问题,我很确定ICollection<>
这是生成的代码(例如见下文)确实需要是ObservableCollection<>
用于将该集合绑定到DataGrid
以期获得成功。
我think我收到了一些关于修改 EF 代码生成的可能性的建议ObservableCollections
而不是ICollections
。有人尝试过成功吗?
我想另一个选择是让包含所选客户对象的虚拟机也包含本地ObservableCollection<Order>
当选择客户对象时创建的......我只担心上下文保存并保持数据同步。
与子对象集合关联的典型代码生成对象:
public partial class Customer
{
public Customer()
{
this.Orders = new HashSet<Order>();
}
public int Id { get; set; }
public System.DateTime Date { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
这就是我所做的,也是对 EF 数据库最适合我的方法。
这就是您需要生成的内容:
public partial class Parent
{
public Parent()
{
this.Children= new ObservableCollection<Child>();
}
这样默认构造函数将被替换。
并且 ObservableCollection 是 ICollection,因此您不需要更改任何其他内容。
要使其在每次更新数据库模型时出现,您必须使用以下部分更改 .tt 文件:
public string UsingDirectives(bool inHeader, bool includeCollections = true)
{
return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion())
? string.Format(
CultureInfo.InvariantCulture,
"{0}using System;{1}" +
"{2}",
inHeader ? Environment.NewLine : "",
includeCollections ? (Environment.NewLine + "using System.Collections.ObjectModel;"
+ Environment.NewLine + "using System.Collections.Generic;") : "",
inHeader ? "" : Environment.NewLine)
: "";
}
和这个:
foreach (var navigationProperty in collectionNavigationProperties)
{
this.<#=code.Escape(navigationProperty)#> = new ObservableCollection<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)