Tag: fluent nhibernate

流畅的NHibernate一对一映射

我很难用Fluent NHibernate开发HasOne映射。 基本上,A类可以在B类中具有匹配(仅一个或没有)记录。 请帮助定义关系的AMap和BMap类。 谢谢。 public class A { public virtual int Id {get;set;} public virtual string P1 {get;set;} public virtual string P2 {get;set;} public virtual string P3 {get;set;} } public class B { public virtual int Id {get;set;} public virtual string P4 {get;set;} public virtual string P5 {get;set;} public virtual string P6 {get;set;} }

流畅的nHibernate – 使用复合键映射孩子产生空引用

给出一个简单的父 – >子(CK,CK)这样的设置..我在添加一个新的子对象时遇到了麻烦,它得到了父引用。 所以我会以这种方式添加对象.. var parent = new Parent{ Children = new List{ new Child{ Other = otherReference } } }; 甚至使用Add()方法添加它… parent.Children.Add(new Child {Other = other}); 对Parent的引用没有得到推进。 它最终只是一个null属性。 我得到以下exception。 {“无法将值NULL插入列’ParentId’,表’mssql_test.Children’;列不允许空值.INSERT失败。\ r \ n语句已终止。”} 我能做到这一点…… new Child { Parent = parentReference, Other = otherReference } 但这似乎有点多余。 我的理解是它应该能够自己推断出引用。 如果这是不可能的,也许我只是误会。 谁能帮我? 我在下面概述了我的代码。 类 class Parent { int […]

Fluent NHibernate将IList 映射为单列的值

我有这堂课: public class MyEntity { public virtual int Id { get; set; } public virtual IList Vectors { get; set; } } 如何将Fluent NHibernate中的Vectors映射到单个列(作为值)? 我在想这个: public class Vectors : ISerializable { public IList Vectors { get; set; } /* Here goes ISerializable implementation */ } public class MyEntity { public virtual int Id { get; […]

Fluent NHibernate使用FluentMappings忽略ClassMap中的属性

我在我的项目中使用NHibernate 3.1和Fluent NHibernate作为ORM。 我需要Fluent NHibernate忽略POCO的属性。 起初,我的post看起来可能与此问题完全相同,但事实并非如此。 我的并发症首先来自POCO定义在不同于映射的assembly中,并且我正在使用流畅的映射来进行POCO。 我还有其他要求,即不在会话工厂配置发生的情况下编写ingore-property代码(这发生在模块外部的集中位置),而是作为定义映射的模块的一部分。 理想情况下,我认为正确的位置将是具体的ClassMap实现,因为它确切地知道如何向ORM描述POCO。 但是,我坚持这个主要是因为这是我对NHibernate及其流畅API的第一次影响。 到目前为止,我对其function和可扩展性有非常好的印象,我希望有一种方法可以通过将映射相关代码封装在相应模块中的方式来实现我的需求。 这是我的配置,从一个集中的地方: List assemblies = GetModules().Select(x => x.GetType().Assembly).ToList(); ISessionFactory nhibernateSessionFactory = Fluently .Configure() .Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm))) .Database( MsSqlConfiguration.MsSql2005 .ShowSql() .ConnectionString(DatabaseConfig.Instance.ConnectionString)) .ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true)) .BuildSessionFactory(); 我使用从ClassMapinheritance的标准类映射: public class User { public virtual int ID { get; set; } public virtual String Username […]

在运行时扩展/修改NHibernate类

抱歉,如果已经有一个点答案,但我还没有找到答案。 我正在使用NH3,我有一个用例,我想在任何实体上添加一个Set,它实现了一个特定的接口。 我有一个配置构建器类,所以我可以在创建会话工厂之前进行这些更改。 鉴于这个减少的例子: public class Person : IHasExtraItems { public Person() { this.ExtraItems = new HashSet(); } public virtual Guid Id { get; set; } public virtual string Name { get; set; } public virtual DateTime Birthdate { get; set; } public virtual ICollection ExtraItems { get; protected set; } } public class ExtraItem […]

安装的默认数据

将默认数据添加到SchemaExport是否合适。 如果不是最好的方法呢? 我想有一个* .sql文件,其中包含“表格”和“默认数据”的创建脚本,还是有更好的方法?

使用MyGeneration和Fluent NHibernate

我在这里使用MyGeneration为NHibernate代码生成找到了一个很棒的模板, http://vucetica.blogspot.com/2009/01/nhibernate-template-for-mygeneration.html 这将创建扩展名为hbm.xml的XML映射文件。 我很想知道是否有人知道支持流畅NHibernate的模板,它定义了使用C#文件的映射。 谢谢

在Fluent NHibernate中引用具有公式的实体

我有一个具有N:1父子关系的模式,该模式存储在另一个表中并由公式选择。 是否可以使用公式将此实体映射到父级? public class ParentEntity { public virtual int ParentId { get; set; } public virtual ChildEntity Child{ get; set; } } public class ParentMapping : ClassMap { public ParentMapping() { Table(“ParentTable”); Id(x => x.ParentId).Column(“ParentId”).GeneratedBy.Assigned().Not.Nullable(); References(x => x.Child).Formula( @”( SELECT TOP 1 ChildTable.ChildId FROM ChildTable WHERE ChildTable.ParentId = ParentId )” ); } } 此映射生成的SQL如下所示: SELECT […]

NHibernate流畅的HasMany映射插入NULL外键

我有一个有很多订单的实体公司。 我将这些映射为彼此: 公司 HasMany(x => x.Orders).KeyColumn(“CompanyID”).Cascade.All().Inverse(); 订购 References(x => x.Company).Column(“CompanyID”) 但是,当我为公司创建新订单并尝试保存它时,我收到一个SQL错误:“无法将值NULL插入列’CompanyID’,表’订单’;列不允许空值.INSERT失败。” (这是生成的SQL语句:INSERT INTO Order(Name,CompanyID)VALUES(?,?); select SCOPE_IDENTITY()]]) 这是一个逻辑错误,因为我确实将CompanyID设置为不可为空。 然而,反过来我预计CompanyID会被正确的ID填充,但是在我的生活中,我无法让它工作。 我尝试删除Inverse(行为根本没有改变),更改了级联,将引用设置为不可为空。 我甚至将列中的列作为Nullable来幽默NHibernate。 但是这给我留下了一个孤立的Order,因为它确实创建了Order记录但是将CompanyID留给了NULL。 这是我的测试代码,我做了新订单: Company test = RepositoryBase.GetById(1); test.Orders.Add(new Order(“test”)); RepositoryBase.SaveWithTransaction(test); 顺便说一句,更新都很顺利。 无论如何,我希望有人能在我的映射中看到我做错了什么。 提前致谢。

流畅的NHibernate – HasMany复合键

如何在没有外键和列名不同的旧数据库上创建HasMany关系? 我知道如何使用References在HeaderVersion上创建一对一的关系,但不知道如何从Header 1到* HeaderVersion创建HasMany。 加入条件应该是: Header.Id1 = HeaderVersion.PId1 AND Header.Id2 = HeaderVersion.PId2 型号http://sofzh.miximages.com/c%23/30xbfo5.png 域: public class Header { public virtual int Id1 { get; set; } public virtual int Id2 { get; set; } public virtual string Something { get; set; } } public class HeaderVersion { public virtual int PId1 { get; set; } […]