当前位置: 首页 > 编程语言 > C#

使用FluentNHibernateAutoMapping保存级联-旧答案是否仍然有效?Share

时间:2023-04-10 19:06:23 C#

使用流畅的NHibernateAutoMapping保存级联-旧答案仍然有效吗?我想准确地解决这个问题:CascadesaveswithfluentNHibernateAutoMappingUsesFluentNhibernatemappings通过一次调用为所有类和关系类型全局打开“级联”,而不是为每个映射单独设置。前面问题的答案看起来不错,但我担心FluentNhibernateAPI去年更改了它的.WithConvention语法,这打破了答案……或者我遗漏了一些东西。我不断收到一堆与IOneToOnePart、IAnyToOnePart及其所有变体相关的命名空间未找到错误:“找不到类型或命名空间名称‘IOneToOnePart’(是否缺少using指令或程序集引用?)”我已经尝试了官方示例dll、RTMdll和最新版本,但它们似乎都没有让VS2008看到所需的命名空间。第二个问题是我想将此类与我的AutoPersistenceModel一起使用,但我不知道我的工厂创建方法中的这一行:.ConventionDiscovery.AddFromAssemblyOf()在哪里。privatestaticISessionFactoryCreateSessionFactory(){returnFluently.Configure().Database(SQLiteConfiguration.Standard.UsingFile(DbFile)).Mappings(m=>m.AutoMappings.Add(AutoMap.AssemblyOf(type=>type.Namespace.EndsWith("Entities")).Override(map=>{map.HasManyToMany(x=>x.Products).Cascade.All();})))//emd映射.ExposeConfiguration(BuildSchema).BuildSessionFactory();//最终确定要发回的所有内容。下面是我正在尝试使用系统的类和使用语句;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.IO;使用FluentNHibernate.Conventions;使用FluentNHibernate.Cfg;使用FluentNHibernate.Cfg.Db;使用NHibernate;使用NHibernate.Cfg;使用NHibernate.Tool.hbm2ddl;使用FluentNHibernate.Mapping;namespaceTestCode{publicclassCascadeAll:IHasOneConvention,IHasManyConvention,IReferenceConvention{publicboolAccept(IOneToOneParttarget){返回真;}publicvoidApply(IOneToOneP艺术目标){target.Cascade.All();}publicboolAccept(IOneToManyParttarget){返回真;}publicvoidApply(IOneToManyParttarget){target.Cascade.All();}publicboolAccept(IManyToOneParttarget){返回真;}publicvoidApply(IManyToOneParttarget){target.Cascade.All();我发现对整个项目执行此操作的最简单方法是使用DefaultCascade:.Conventions.Add(DefaultCascade.All());转到wiki上的“最简单约定”部分和其他列表编辑:这是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())缓存。Is(x=>x.AsReadOnly())ForeignKey.EndsWith("ID")一个警告——维基中的一些方法名称可能是错误的。我用我可以验证的内容(即DefaultCascade和DefaultLazy)编辑了wiki,但不能保证其余部分。但是,如果需要,您应该能够使用Intellisense找出正确的名称。这是一个完整的工作示例,类似于入门指南https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started//=====CONSOLEMAINusingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用FluentNHibernate.Cfg;使用FluentNHibernate.Cfg.Db;使用NHibernate;使用NHibernate.Cfg;使用NHibernate.Tool.hbm2ddl;使用System.IO;使用FluentNHibernate.Automapping;使用App4.Entities;使用系统诊断;namespaceApp4{classProgram{staticvoidMain(string[]args){//创建我们的NHibernate会话工厂varsessionFactory=CreateSessionFactory();using(varsession=sessionFactory.OpenSession()){//使用(vartransaction=session.BeginTransaction()){//创建几个Stores,每个Stores都有一些Products和EmployeesvartopShelf=newShelf();varsw=new秒表();sw.开始();for(vari=0;i();foreach(varstoreinshelfs){WriteShelfPretty(store);}}}Console.ReadLine();}privateconststringDbFile="FIVEProgram.db";privatestaticISessionFactoryCreateSessionFactory(){returnFluently.Configure().Database(SQLiteConfiguration.Standard.UsingFile(DbFile)).Mappings(m=>m.AutoMappings.Add(AutoMap.AssemblyOf(type=>type.Namespace.EndsWith(“实体”)).Override(map=>{map.HasManyToMany(x=>x.Products);//.Cascade.All();}).Conventions.AddFromAssemblyOf()))//emd映射.ExposeConfiguration(BuildSchema)//Deleteandremakedb(seefunctionbelow).BuildSessionFactory();//finalizesthewholethingtosendback。}privatestaticvoidBuildSchema(Configurationconfig){//在每次运行时删除现有的数据库if(File.Exists(DbFile))File.Delete(DbFile);//这个NHibernate工具接受一个配置(包含映射信息)//并从中导出一个数据库模式newSchemaExport(config).Create(false,true);}privatestaticvoidWriteShelfPretty(Shelfshelf){Console.WriteLine(shelf.Id);Console.WriteLine("产品ts:");foreach(varproductinshelf.Products){Console.WriteLine(""+product.Name);}Console.WriteLine();}}}//DataClassesusingSystem;usingSystem.Collections.Generic;使用System.Linq;使用System.Text;命名空间App4.Entities{publicclassProduct{publicvirtualintId{get;privateset;}publicvirtualstringName{get;set;}publicvirtualdoublePrice{get;set;}}publicclassShelf{publicvirtualintId{get;privateset;}publicvirtualIListProducts{get;privateset;}publicShelf(){Products=newList();}}}//CascadeAllHelperClassusingFluentNHibernate.Conventions;使用FluentNHibernate.Conventions.AcceptanceCriteria;使用FluentNHibernate.Conventions.Inspections;使用FluentNHibernate.Conventions.Instances;使用System;使用System.Collections.Generic;namespaceApp4{publicclassCascadeAll:IHasOneConvention,//实际应用约定IHasManyConvention、IReferenceConvention、IHasManyToManyConvention,IHasOneConventionAcceptance,//测试看我们是否应该使用约定IHasManyConventionAcceptance,//我想我们可以跳过这些,因为它永远是真的IReferenceConventionAcceptance,//添加它们以供稍后参考(IAcceptanceCriteriacriteria){//criteria.Expect(x=>(true));}publicvoidApply(IOneToOneInstanceinstance){instance.Cascade.All();}//一对多publicvoidAccept(IAcceptanceCriteriacriteria){//criteria.Expect(x=>(true));}publicvoidApply(IOneToManyCollectionInstanceinstance){instance.Cascade.All();}//多对一publicvoidAccept(IAcceptanceCriteriacriteria){//criteria.Expect(x=>(true));}publicvoidApply(IManyToOneInstanceinstance){instance.Cascade.All();}//多对多publicvoidAccept(IAcceptanceCriteriacriteria){//criteria.Expect(x=>(true));}publicvoidApply(IManyToManyCollectionI实例实例){instance.Cascade.All();}}}公约的签名已经改变了你不使用类似ReSharper的东西吗?这将指向你的结论。您可以在wiki上阅读有关新公约的更多信息。这就是C#学习教程:使用FluentNHibernateAutoMapping保存级联-旧答案仍然有效吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: