Tag: nhibernate mapping

NHibernate:一个基类,几个映射

我对NHibernate比较陌生,但是我已经将它用于最后几个程序并且我很喜欢。 我遇到了需要将4-5个数据库中的数据聚合到一个数据库中的情况。 具体来说,它是序列号数据。 每个数据库都有自己的映射文件,但最终实体都共享相同的基本结构(Serial类)。 我理解NHibernate希望每个类都有一个映射,所以我最初的想法是拥有一个基本的Serial Class,然后为每个不同的数据库inheritance它,并创建一个唯一的映射文件(inheritance的类将没有内容)。 这应该非常适合抓取所有数据并填充对象。 我想要做的是使用基类映射将这些inheritance的类(不确定正确的术语是什么)保存到基类表中。 问题是我不知道如何强制NHIbernate为对象使用特定的映射文件。 使用’session.save()’时,将inheritance的类转换为基类没有任何作用(它抱怨没有映射)。 有没有办法明确指定使用哪个映射? 或者是否只有一些OOP主体我缺少更具体地将inheritance的类转换为基类? 或者这个想法是不好的。 关于NHibernate(第8章)我可以找到的所有inheritance内容似乎都不完全适用于这个函数,但我可能是错的(每个具体类的表看起来可能有用,但我可以’关于NHibernate如何计算出去做的事情,我完全绕过它。

如何在Fluent NHibernate中映射IDictionary

我有一个带有IDictionary的课程。 正如您所看到的,它使用多对多来使用tOwnedCodedExample表从其表中获取CodedExamples,以查找OwnerClass拥有的内容。 我意识到这是一个非常基本的(并且希望是标准的)映射,但我正在努力,无法找到任何文档,因此非常感谢任何可能的帮助。 非常感谢 斯图

将类型传递给generics方法(嵌套generics)

如果我没有TRootEntity ,我怎么能调用以下方法,但只有它的TYPE : public void Class(Action<IClassMapper> customizeAction) where TRootEntity : class; 最终目标是运行以下代码 var mapper = new ModelMapper(); mapper.Class(ca => { ca.Id(x => x.Id, map => { map.Column(“MyClassId”); map.Generator(Generators.HighLow, gmap => gmap.Params(new { max_low = 100 })); }); ca.Property(x => x.Something, map => map.Length(150)); }); 它用于创建动态NHibernate HBM 。 这里有更多信息 相关问题请参见此处和此处 。

如何正确实现IUserType?

我需要通过编写一个实现IUserType的新mapper类来为NHibernate创建一个自定义类型 。 虽然覆盖大多数方法和属性相对简单,但我理解如何正确处理以下成员会遇到一些困难: object Assemble(object cached, object owner); object DeepCopy(object value); object Disassemble(object value); object Replace(object original, object target, object owner); 我不明白他们的目的是什么; 更重要的是,如何正确实施它们。 我见过的大多数例子都只返回原始输入参数。 public object DeepCopy(object value) { return value; } public object Replace(object original, object target, object owner) { return original; } public object Assemble(object cached, object owner) { return cached; } public […]

使用Fluent NHibernate进行映射时对接口进行编程

我已经被提交并已经开始学习Fluent NHibernate(没有以前的NHibernate经验)。 在我的项目中,我正在编程接口以减少耦合等。这意味着几乎所有“一切”都指的是接口而不是具体类型(IMessage而不是Message)。 这背后的想法是通过能够模拟依赖关系来帮助使其更易于测试。 但是,(流畅)当我尝试映射到接口而不是具体类时,NHibernate不喜欢它。 问题很简单 – 根据Fluent Wiki,例如,定义我的类的ID字段是明智的 int Id { get; private set; } 获取典型的自动生成的主键。 但是,这只适用于具体的类 – 我不能在接口上指定访问级别,同一行必须是这样 int Id { get; set; } 而且我认为否定在具体类中将setter设为私有(这个想法是只有NHibernate应该将ID设置为由DB分配)。 就目前而言,我想我只会公开制定者,并试图避免写入它的诱惑。但是,是否有人知道什么是“适当的”,最佳实践方式来创建一个正确的主键只有NHibernate可以写入的字段,同时仍然只编程到接口? 更新 根据我在mookid和James Gregory的两个答案后的理解,我可能会走错路 – 我不应该有理由让每个实体拥有一个接口,就像我现在一样。 这一切都很好。 我想我的问题就变成了 – 是否没有理由对任何实体的接口进行100%编程? 如果甚至有一种情况可以certificate这是合理的,那么可以用(流利的)NHibernate做到这一点吗? 我问,因为我不知道,不要批评。 谢谢你的回复。 🙂