Tag: nhibernate

流畅的NHibernateexception在集合之间移动对象

将一个对象从一个集合移动到另一个集合时,当cascade设置为all-delete-orphan时,我得到以下exception: 已删除的对象将通过级联重新保存(从关联中删除已删除的对象) 我认为当你使用all-delete-orphan时,nhibernate不会在另一个集合中引用它时删除它。 任何人都可以确认,当你有像文件夹这样的对象包含文件夹或文件并将文件从一个文件夹移动到另一个文件夹时,你不应该得到这个例外吗? 我在vs2010中制作了一个示例项目来演示这种行为。 任何人都可以说我的映射是正确的还是nhibernate中有错误? FileMapping.cs public class FileMapping: ClassMap { public FileMapping() { Id(x => x.Id, “Id”).GeneratedBy.Native(“File_seq”); Map(x => x.Name, “Name”).Not.Nullable(); References(x => x.Folder).Not.Nullable().Column(“idFolder”); } } FolderMapping.cs public class FolderMapping: ClassMap { public FolderMapping() { Id(x => x.Id, “Id”).GeneratedBy.Native(“Folder_seq”); Map(x => x.Name, “Name”).Not.Nullable(); HasMany(x => x.Folders).Inverse().Cascade.AllDeleteOrphan().KeyColumn(“idParentFolder”); HasMany(x => x.Files).Inverse().Cascade.AllDeleteOrphan().KeyColumn(“idFolder”); References(x => x.ParentFolder).Nullable().Column(“idParentFolder”); } […]

在Fluent中使用时间类型Nhibernate生成exception“无法将类型’System.DateTime’的对象强制转换为’NHibernate.Type.TimeType’

我发现NHibernate有几个内置类型 ,它们不存在于C# ,但存在于某些SGBD中。 现在我有以下内容: public class TimeSlot : EntityBase { public virtual NHibernate.Type.TimeType FromTime { get; set; } public virtual NHibernate.Type.TimeType ToTime { get; set; } } public class TimeSlotMap : ClassMap { public TimeSlotMap() { Id(c => c.Id).GeneratedBy.Identity(); Map(c => c.FromTime); Map(c => c.ToTime); } } 在MSSQL中,此表看起来像附加图像 现在,当我尝试查询此表时,我遇到以下exception: 无法将类型为“System.DateTime”的对象强制转换为“NHibernate.Type.TimeType” 我做错了什么? Fluent NHibernate如何使用Time Date Type?

在NHibernate中规范化EnumStringType

我目前在NHibernate中使用枚举如下映射.. public enum UploadMethod { Java, Silverlight, Gears, Flash } class UploadMethodType : EnumStringType { public UploadMethodType() : base(typeof(UploadMethod), 255) { } } public class Person { /* Bunch of non interesting properties… */ public UploadMethod PreferredUploadMethod { get; set; } } 除了数据库远离规范化之外,其中的工作完全正常,People表中的每一行都有一个包含四个文本字符串之一的列。 我现在将它分成一个新表,但我不确定如何在NHibernate中创建映射。 我的第一直觉只是但是我不希望这个枚举成为它自己的实体,我基本上只需要NHibernate来做一个简单的连接来增加额外的列。 作为一个止损,我刚刚创建了一个视图,它工作得很好,但我宁愿那个抽象层在我的NHibernate映射中,而不是模式。

在Fluent NHibernate中处理与值类型的一对多关系

我正在努力将应用程序迁移到NHibernate,我正在使用Fluent NHibernate。 我遇到了一个将值类型集合映射到聚合根的问题。 我有一个PhoneNumber值类型,它具有一些属性 – Number , NumberType和Description 。 我的域中有许多对象都有电话号码集合。 在数据库(SQL 2008)中,这些值保存在不同的表中。 所以我可能有Customers和CustomerPhoneNumbers以及Vendors和VendorPhoneNumbers 。 电话号码表是相同的,除了将它们与父母相关联的外键。 问题是我想使用一个简单的PhoneNumber值类型,而不必创建具有将它们与其父类型相关联的属性的CustomerPhoneNumber和VendorPhoneNumber类型,我不知道如何在NHibernate中实现它。 这是可能的还是我需要更改我的域对象以更紧密地匹配底层数据库架构? 更新:更多信息 看起来我甚至无法将基本地图用于检索。 这是我所拥有的简化示例: public class CustomerMap : ClassMap { public CustomerMap() { Table(“Customers”); Id(x => x.Id); Map(x => x.Name); Component(x => x.Address); HasMany(x => x.PhoneNumbers) .KeyColumn(“CustomerId”) .Cascade.All() .Table(“CustomerPhoneNumbers”); } } public class PhoneNumberMap : ClassMap { public PhoneNumberMap() […]

流畅的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;} }

Application_EndRequest不会在404上触发

我正在使用ASP MVC 2和Nhibernate。 我已经创建了一个HTTP模块,如夏天的NHibernate 13所示,看起来像这样: public void Init(HttpApplication context) { context.PreRequestHandlerExecute += new EventHandler(Application_BeginRequest); context.PostRequestHandlerExecute += new EventHandler(Application_EndRequest); } private void Application_BeginRequest(object sender, EventArgs e) { ISession session = StaticSessionManager.OpenSession(); session.BeginTransaction(); CurrentSessionContext.Bind(session); } private void Application_EndRequest(object sender, EventArgs e) { ISession session = CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory); if (session != null) try { session.Transaction.Commit(); } catch (Exception) { […]

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; […]

NHibernateinheritance – 判别器 – 值

是否有可能在NHibernate中使用这样的鉴别器? 如果值等于String.Empty – > Class1 Else – > Class2 我已经有了CultureName的字符串列,我想将它用作鉴别器。 我不想添加额外的布尔列。 如果CultureName是String.Empty,那么我想要一个类,否则另一个类。 如果不可能,你能帮我找到办法吗? 我正在使用xml映射(不是Fluent NHibernate)。 我正在搜索的是类似于else(默认)情况的通配符,所以我可以像这样映射:

object引用未保存的瞬态实例在刷新之前保存瞬态实例

我有一个自我加入员工实体类,其id,name和ref列与self相关。 我想创建它的新实例并将其持久化到db。 起初我创建了一个Employee类的实例并将其命名为manager。 然后我从Employee表中获取了这些值的记录:Id = 1,Name =“A”,RefId = null并将这些值设置为manager对象。 之后我再次创建了Employee类的实例 并设置它的属性值如下:emp.Name =“B”,emp.Ref = manager。 最后我通过使用base.Add(resource)方法来坚持它。 那时Nhibernate引发了以下错误:“对象引用未保存的瞬态实例,在刷新之前保存瞬态实例”。 这是映射文件内容: class> 请帮我解决这个错误。 谢谢

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 […]