Tag: fluent nhibernate

如何使用FluentNHibernate映射具有复杂键类型(CultureInfo)的字典

我有字典,我正在使用Fluent NHibernate进行映射。 该词典具有复杂的键类型CultureInfo 。 我的数据库无法存储该类型,因此我想使用它的字符串表示forms。 在字典映射以外的映射中,我可以使用用户类型约定成功映射CultureInfo -properties。 现在我想知道如何为dicationary映射做这件事。 这是包含字典的实体: public class MultilingualPhrase : Entity { private IDictionary languageValues; public virtual IDictionary LanguageValues { get { return languageValues; } } } 这是实体的自动映射覆盖: public void Override(AutoMapping mapping) { mapping .HasMany(n => n.LanguageValues) .Access.ReadOnlyPropertyThroughCamelCaseField() .AsMap(“CultureName”) .Element(“Phrase”) .Table(“MultilingualPhraseValues”); } 此映射(显然)会导致以下错误: 无法将CultureInfo中的参数值转换为String。 我知道NHibernate有一个CultureInfo的类型自定义类型实现(我用它来映射属性)但是如何在我的映射覆盖中指定它?

在使用Fluent Nhibernate Table-Per-Subclass策略时,您能指定标识列吗?

我正在创建一个Fluent N hibernate子类映射,目前看起来像这样: public class TaskDownloadMap: SubclassMap { public TaskDownloadMap() { Table(“TasksDownload”); Map(x => x.ExtraProperty1, “ExtraProperty1”) .Nullable(); Map(x => x.ExtraProperty2, “ExtraProperty2”) .Nullable(); } } 当我尝试保存其中一个实体时,我得到一个例外: Test.TaskRepositoryTest.DeleteTest: NHibernate.Exceptions.GenericADOException : could not insert: [TaskManager.Entities.TaskDownload#269][SQL: INSERT INTO TasksDownload (ExtraProperty1, ExtraProperty2, Task_id) VALUES (?, ?, ?)] —-> System.Data.SqlClient.SqlException : Invalid column name ‘Task_id’. 这是因为我在子类的表上设置的Id列被命名为“TaskId”。 是否有一些覆盖nhibernate试图使用的默认命名方案? 我似乎没有能力在子类中指定“Id”列,我甚至无法找到其他任何人谈论它。 父映射如下所示: public class […]

无论关系中是否存在正确的Inverse(流畅的nhibernate)设置,NHibernate都会发出无关的更新语句

以下类以极少的方式表示我的遗留数据库的真实场景。 我可以添加新列,但这是我能做的全部,因为许多其他遗留应用程序使用了300多个表数据库,这些应用程序不会移植到NHibernate(因此无法从复合键迁移) : public class Parent { public virtual long Id { get; protected set; } ICollection children = new HashSet(); public virtual IEnumerable Children { get { return children; } } public virtual void AddChildren(params Child[] children) { foreach (var child in children) AddChild(child); } public virtual Child AddChild(Child child) { child.Parent = this; […]

流畅的NHibernate错误:实体’ClassMap`1’没有映射的Id

我正在将之前的项目从使用普通的NHibernate hbm.xml映射转换为Fluent NHibernate。 目前,我仍然坚持应该成为最后一步的工作之一。 我为DefaultAutomappingConfiguration添加了一个派生类来修改我的ID命名约定。 字符串“Id”附加到类名: public override bool IsId(FluentNHibernate.Member member) { return member.Name == member.DeclaringType.Name + “Id”; } 这应该使“代理商”在名为“AgencyId”的字段中具有ID。 相反,我收到此错误: The entity ‘ClassMap`1’ doesn’t have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id). {Name = “ClassMap`1” FullName = “FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”} 我在IsId函数上创建了一个断点,看看发生了什么: {Property: […]

NHibernate与Firebird ……是否启用了这些function?

我们正在使用NHibernate在Firebird后端取得巨大成功。 我的问题与Firebird支持的NHibernate中可用的function有关。 如果您对Firebird和NHibernate有任何专业知识,欢迎您提出意见。 Firebird是否支持“未来”查询? 从我的阅读中可以看出,Firebird是少数几个不支持此function的数据库之一。 有没有人有一个解决方法,因为“未来”将是一个很好的function来利用。 Firebird是否支持NHibernatefunction“prepare_sql”。 出于某种原因,我不能让它在Firebird中工作,并不断收到关于参数大小不相等的警告(在Nhibernate Profiler中)。 Firebird是否支持批处理? 在NHibernate映射中,我们指定批处理但是在分析器中看不到任何这种证据。 对于那些感兴趣的人,我们使用Fluent NHibernate来配置NHibernate。 一切运作良好,我们对ORM有很大的控制权,但只需要澄清上述内容。 你的意见?

流畅的NHibernate,关于代码设计的问题

Greeetings,我是Fluent NHibernate的新手。 让我们想象一下,有很多课程 ClassA的 ClassB的 ClassC … 创建模式后,我想获得一个创建表的列表。 例如: 打开表单 – >有一个表的名称,当我们点击每个表时,我们从这个表中获取记录。 我怎样才能做到这一点? 有更便宜的方式吗? 有可能没有反思吗? (解析所有课程,并获得它的名字)

使用分区鉴别器列映射分区表

我有一个遗留的Oracle 10g数据库。 此数据库有一个表ITEMDELIVERY ,其ITEMDELIVERY DELIVERY_DATE 。 该表由此列分区。 因此,此表的主键是包含ITEMDELIVERY_ID和DELIVERY_DATE列的复合键。 还有另一个表ITEMDELIVERYDETAIL它有一个FK到ITEMDELIVERY 。 为了能够从分区中受益并且能够自己进行分区,该表有一个PARTITION_DATE列。 ITEMDELIVERY_ID和PARTITION_DATE形成FK到ITEMDELIVERY 。 PARTITION_DATE在ITEMDELIVERYDETAIL没有商业含义,只是出于技术原因。 因此,我想避免在我的实体中指定此列。 我在IAutoMappingOverride的实现中尝试了以下内容: mapping.Map(x => x.ItemDelivery.DeliveryDate).Column(“PARTITION_DATE”); 但这不起作用,我得到以下exception: NHibernate.PropertyNotFoundException:在“Domain.ItemDeliveryDetail”类中找不到属性“DeliveryDate”的getter 有没有办法实现我的目标?

如何测试Nhibernate的扩展方法,即使在fakeiteasy中指定return后也没有返回值?

我有一个像下面这样的类使用Fluent Nhibernate我从数据库中获取数据 public class MyActualClass { public MyActualClass(ISessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public List GetData() { using (session = sessionFactory.OpenSession()) { var result = session.QueryOver() .SelectList(list => list .Select(x => x.Id) .Select(x => x.CreationDate) .Select(x => x.AnnualAmount) .Select(x => x.AnnualCurrency) .Select(() => monthlyAlias.MonthlyAmount) .Select(() => monthlyAlias.MonthlyCurrency) .Select(() => shareAlias.CurrentSharevalue) .Select(() => miscAlias.MarketValueAmount) ).Where(a […]

NHibernate:空列上的属性的默认值

我正在使用其他应用程序使用的旧数据库,因此我无法修改其结构。 有时我有可以为空的列,我想要映射为非可空类型。 例如,我在数据库上有一个可空的EndValidity列,我希望在不可为空的DateTime上映射,如果为null,它应该是DateTime.MaxValue,或者作为一个更简单的例子,如果为null则必须为false的可空位列。 我正在考虑为它编写一个自定义用户类型(如果可能的话,带参数),还是nHibernate中包含了什么? 如果唯一的解决方案是编写自定义的usertype,对于布尔情况,我是否可以覆盖fluentnhibernate约定以始终将该usertype应用于布尔值?

Fluent nHibernate – 如何在联结表上映射非键列?

以Fluent nHibernate网站上提供的示例为例,我需要稍微扩展一下: alt text http://wiki.fluentnhibernate.org/images/2/24/FirstProjectSchema.png 我需要在StoreProduct表中添加一个’Quantity’列。 我如何使用nHibernate映射这个? 为上面给出的场景提供了一个示例映射,但我不确定如何将Quantity列映射到Product类上的属性: public class StoreMap : ClassMap { public StoreMap() { Id(x => x.Id); Map(x => x.Name); HasMany(x => x.Employee) .Inverse() .Cascade.All(); HasManyToMany(x => x.Products) .Cascade.All() .Table(“StoreProduct”); } }