Gle*_*enn 8 c# fluent-nhibernate
我想要完全解决这个问题: Cascade使用流畅的NHibernate AutoMapping保存
使用Fluent Nhibernate映射使用一次调用为所有类和关系类型全局打开"级联",而不是单独为每个映射设置它.
对早期问题的回答看起来很棒,但我担心Fluent Nhibernate API去年改变了它的.WithConvention语法并且打破了答案......或者我错过了什么.
我不断收到一堆名称空间未找到与IOneToOnePart,IManyToOnePart及其所有变体有关的错误:
"无法找到类型或命名空间名称'IOneToOnePart'(您是否缺少using指令或程序集引用?)"
我已经尝试了官方示例dll,RTM dll和最新版本,但它们似乎都没有让VS 2008看到所需的命名空间.
第二个问题是我想在我的AutoPersistenceModel中使用该类,但我不知道这一行在哪里:.ConventionDiscovery.AddFromAssemblyOf()在我的工厂创建方法中.
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(DbFile))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<Shelf>(type => type.Namespace.EndsWith("Entities"))
.Override<Shelf>(map =>
{
map.HasManyToMany(x => x.Products).Cascade.All();
})
)
)//emd mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();//finalizes the whole thing to send back.
}
Run Code Online (Sandbox Code Playgroud)
下面是我正在尝试的类和使用语句
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FluentNHibernate.Conventions;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using FluentNHibernate.Mapping;
namespace TestCode
{
public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public bool Accept(IOneToOnePart target)
{
return true;
}
public void Apply(IOneToOnePart target)
{
target.Cascade.All();
}
public bool Accept(IOneToManyPart target)
{
return true;
}
public void Apply(IOneToManyPart target)
{
target.Cascade.All();
}
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.Cascade.All();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*ell 18
我发现为整个项目执行此操作的最简单方法是使用DefaultCascade:
.Conventions.Add( DefaultCascade.All() );
Run Code Online (Sandbox Code Playgroud)
转到维基上的"最简单的约定"部分,以及其他列表.
编辑: 以下是Wiki的列表:
Table.Is(x => x.EntityType.Name + "Table")
PrimaryKey.Name.Is(x => "ID")
AutoImport.Never()
DefaultAccess.Field()
DefaultCascade.All()
DefaultLazy.Always()
DynamicInsert.AlwaysTrue()
DynamicUpdate.AlwaysTrue()
OptimisticLock.Is(x => x.Dirty())
Cache.Is(x => x.AsReadOnly())
ForeignKey.EndsWith("ID")
Run Code Online (Sandbox Code Playgroud)
一句警告 - Wiki中的一些方法名称可能是错误的.我用我可以验证的内容编辑了Wiki(即DefaultCascade和DefaultLazy),但不能保证其余的.但是,如果需要,您应该能够使用Intellisense找出正确的名称.
| 归档时间: |
|
| 查看次数: |
4207 次 |
| 最近记录: |