k3b*_*k3b 3 collections wpf nhibernate-mapping fluent-nhibernate nhibernate-collections
我试图使用Fluent-Nibernate和需要Observable集合的wpf(实现INotifyCollectionChanged
接口).
在uNHAddins:NHibernate的非官方插件我找到了
uNhAddIns.WPF.Collections.Types.ObservableListType<T>
Run Code Online (Sandbox Code Playgroud)
实现INotifyCollectionChanged
.它可以像这样在Fluent-Nibernate中配置
namespace FluentNHibernateTutorial.Mappings
{
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasManyToMany(x => x.Products)
.CollectionType<uNhAddIns.WPF.Collections.Types
.ObservableListType<Product>>()
.Cascade.All()
.Table("StoreProduct");
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何使用Fluent-Nibernate 实现一个总是使用ObservableListType作为默认IList实现的约定?
更新:完美的解决方案可以替代Fluent-NHibernate-Automapper
像这样的东西应该做的伎俩:
public class ObservableListConvention :
IHasManyConvention, IHasManyToManyConvention, ICollectionConvention {
// For one-to-many relations
public void Apply(IOneToManyCollectionInstance instance) {
ApplyObservableListConvention(instance);
}
// For many-to-many relations
public void Apply(IManyToManyCollectionInstance instance) {
ApplyObservableListConvention(instance);
}
// For collections of components or simple types
public void Apply(ICollectionInstance instance) {
ApplyObservableListConvention(instance);
}
private void ApplyObservableListConvention(ICollectionInstance instance) {
Type collectionType =
typeof(uNhAddIns.WPF.Collections.Types.ObservableListType<>)
.MakeGenericType(instance.ChildType);
instance.CollectionType(collectionType);
}
}
Run Code Online (Sandbox Code Playgroud)
回答问题更新:
这个约定应该适用于automapper,如下所示:
AutoMap.AssemblyOf<Store>(cfg)
.Conventions.Add<ObservableListConvention>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1530 次 |
最近记录: |