标签: nhibernate-mapping

NHibernate中的反向属性

我如何使用反向属性?如果我没有弄错,对于一对多关系,inverse属性必须设置为true.对于多对多关系,其中一个实体类逆属性必须设置为true,另一个设置为false.

任何人都可以对此有所了解吗?

nhibernate nhibernate-mapping

87
推荐指数
2
解决办法
3万
查看次数

无法将NHibernate.Collection.Generic.PersistentGenericBag类型的对象强制转换为List

我有一个名为ReportRequest的类:

public class ReportRequest
{
    Int32 templateId;
    List<Int32> entityIds;

    public virtual Int32? Id
    {
        get;
        set;
    }

    public virtual Int32 TemplateId
    {
        get { return templateId; }
        set { templateId = value; }
    }

    public virtual List<Int32> EntityIds
    {
        get { return entityIds; }
        set { entityIds = value; }
    }

    public ReportRequest(int templateId, List<Int32> entityIds)
    {
        this.TemplateId = templateId;
        this.EntityIds = entityIds;
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用Fluent Hibernate映射为:

public class ReportRequestMap : ClassMap<ReportRequest>
{
    public ReportRequestMap()
    {
        Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native();
        Map(x …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

82
推荐指数
1
解决办法
3万
查看次数

nHibernate,不存在具有给定标识符的行

我有一个映射的方式.

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="etl" assembly="Model" default-lazy="false">
  <class name="Model.Entities.DataField, Model" table="mdm_field">
    <id name="FieldId" column="field_id" type="int">
      <generator class="native" />
    </id>
    <many-to-one name="KeyField" class="Model.Entities.Key, Model" column="field_id" />
  </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

现在在数据库中,mdm_field表中的field_id有时具有相关key_field表中不存在的值,因此它基本上是破坏了引用完整性.因为当我加载实体时,我得到一个错误"没有给定标识符的行存在".如何配置映射以适应这种情况,以便在这种情况下不会死亡.

c# nhibernate nhibernate-mapping

49
推荐指数
3
解决办法
3万
查看次数

哪种.NET数据类型最适合在NHibernate中映射NUMBER Oracle数据类型?

我已经看到了一些decimal在NHibernate项目中使用的示例,用于映射到Oracle中的整数列.现在,我使用int,并long在我的计划.

decimalover int/ long?有什么好处?它表现更好吗?

c# oracle nhibernate nhibernate-mapping oracle10g

45
推荐指数
3
解决办法
7万
查看次数

流畅的NHibernate:如何创建一对多双向映射?

基本问题:如何在Fluent NHibernate中创建双向一对多地图?

细节:

我有一个有很多孩子的父对象.在我的情况下,孩子没有父母,所以在数据库中,我想外键的母体有NOT NULL约束是没有意义的.我从Fluent NHibernate映射自动生成我的数据库.

我的父母有很多子对象,如下所示:

public class Summary
{
   public int id {get; protected set;}

   public IList<Detail> Details {get; protected set;}
}

public  class Detail
{
   public int id {get; protected set;}

   public string ItemName {get; set;}

  /* public Summary Owner {get; protected set;} */ //I think this might be needed for bidirectional mapping?
}
Run Code Online (Sandbox Code Playgroud)

这是我开始的映射:

public class SummaryMap : ClassMap<Summary>
{
    public SummaryMap()
    {
        Id(x => x.ID);

        HasMany<Detail>(x => x.Details);
    }
}

public class DetailMap : …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

44
推荐指数
1
解决办法
3万
查看次数

FluentNHibernate和NHibernate的"按代码映射"之间的区别

我来自ORM工具的实体框架和LLBL背景.

我被要求建立一个基于NHibernate的新系统.我从来没有这样做过,所以我带着新鲜的眼睛来看它.

使用Fluent NHibernate进行映射和NHibernate中的"按代码映射"有什么区别?有偏好吗?

nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

30
推荐指数
2
解决办法
1万
查看次数

流畅的NHibernate实体HasMany不同子类类型的集合

所以一切都与基本的鉴别器映射很好地协调.我可以毫无问题地直接与实体A和B进行交互.

public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
Run Code Online (Sandbox Code Playgroud)

这在BaseType映射中没有戏剧性地映射为

DiscriminateSubClassesOnColumn<string>("Type")
               .SubClass<BaseType>("A", m => { })
               .SubClass<BaseType>("B", m => { });
Run Code Online (Sandbox Code Playgroud)

在以下情况下会出现问题:在聚合中,我们要将集合映射到每个子类

使用如下的映射

public class AggregateMap: BaseMap<Aggregate>
{
        public AggregateMap()
        {
                HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
                HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();            
        }
}
Run Code Online (Sandbox Code Playgroud)

这些显然不是完整的映射,但是最低限度的描述我正在尝试的东西.添加到ACollection和BCollection的项目在保存Aggregate时通过级联正确保留.然而,当检索到聚合时,对类型歧视存在混淆.

我已经经历了许多不同的可能解决方案,我不再知道什么不起作用.我觉得我不应该在集合上提供where子句,但事情对我来说不起作用.

任何线索将不胜感激.

c# nhibernate-mapping fluent-nhibernate

27
推荐指数
1
解决办法
2230
查看次数

使用Fluent NHibernate生成表索引

是否可以使用Fluent NHibernate生成表索引以及数据库模式的其余部分?我希望能够通过自动构建过程生成完整的数据库DDL.

nhibernate nhibernate-mapping fluent-nhibernate

25
推荐指数
3
解决办法
1万
查看次数

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

我已经被提交并已经开始学习Fluent NHibernate(没有以前的NHibernate经验).在我的项目中,我正在编程接口以减少耦合等.这意味着几乎所有"一切"都指的是接口而不是具体类型(IMessage而不是Message).这背后的想法是通过能够模拟依赖关系来帮助使其更易于测试.

然而,(流利的)当我尝试映射到接口而不是具体类时,NHibernate并不喜欢它.问题很简单 - 根据Fluent Wiki,定义我的类的ID字段是明智的

int Id { get; private set; }
Run Code Online (Sandbox Code Playgroud)

获取典型的自动生成的主键.但是,这只适用于具体的类 - 我不能在接口上指定访问级别,同一行必须是这样

int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

并且我认为否定在具体类中使setter私有(想法是只有NHibernate应该将ID设置为由DB分配).

就目前而言,我想我只会公开制定者并试图避免写入它的诱惑..但是有没有人知道什么是"正确的",最佳实践方式来创建一个正确的主键只有NHibernate可以写入的字段,而仍然只编程到接口?

更新

根据我从mookid和James Gregory的两个答案之后的理解,我可能走错了路 - 我不应该有理由让每个实体拥有一个接口,就像我现在一样.这一切都很好.我想我的问题就变成了 - 是否没有理由对任何实体的接口进行100%编程?如果甚至有一种情况可以证明这是合理的,那么可以用(流利的)NHibernate做到这一点吗?

我问,因为我不知道,不要批评.谢谢你的回复.:)

c# nhibernate nhibernate-mapping fluent-nhibernate

25
推荐指数
4
解决办法
1万
查看次数

NHibernate DuplicateMappingException当两个类具有相同的名称但名称空间不同时

我的域模型根中有一个类,如下所示:

namespace Domain
{
  public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)

我还在另一个名称空间中有另一个具有相同名称的类:

namespace Domain.SubDomain
{
  public class Foo { ... }
}
Run Code Online (Sandbox Code Playgroud)

对于我的映射,我有一个Mapping目录,其子目录名称SubDomain包含在Domain.SubDomain命名空间中找到的域类的映射.他们都在同一个集会中.

但是,当我尝试使用NHibernate加载它们时,我不断得到DuplicateMappingException...即使两个Foos都有不同的命名空间.我用来加载我的NHibernate配置的代码是这样的:

var cfg = new Configuration()
  .Configure()                
  .AddAssembly("Domain");   
Run Code Online (Sandbox Code Playgroud)

我如何告诉NHibernate让我使用两个具有相同名称(但名称空间不同)的实体?

.net c# nhibernate orm nhibernate-mapping

25
推荐指数
2
解决办法
9671
查看次数