标签: nhibernate-mapping

流利的NHibernate问题

假设您有两个表,"Users"和"UserRoles".以下是两个表的结构(表 - 列):

用户 - UserID(int)

UserRoles - UserID(int),角色(字符串)

我想要的是我的域中的"用户"类具有IList角色.如何构建我的Fluent NHibernate映射来实现这一目标?

nhibernate nhibernate-mapping fluent-nhibernate

8
推荐指数
1
解决办法
1728
查看次数

NHibernate中的多对多映射

我希望使用NHibernate创建多对多的关系.我不确定如何在XML文件中映射这些.我还没有创建类,但它们只是基本的POCO.


PERSONID

能力
胜任
标题

Person_x_Competency
personId
competencyId

我是否会在每个POCO中为另一个类创建一个List?然后使用NHibernate配置文件以某种方式映射它们?

nhibernate many-to-many nhibernate-mapping xml-configuration

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

NHibernate映射属性与流畅的NHibernate

映射属性是否提供与nhib hbm相同的多功能性?你能和FNH一起使用它们来处理FNH还没有像hbm那样做的东西吗?

干杯,
Berryl

通过映射属性,我不是指hbm文件; NHIB(或者现在可能是NHib贡献者)显然存在属性,用于装饰类和类属性.我猜这些早期的FNH,但不确定.

nhibernate nhibernate-mapping fluent-nhibernate

8
推荐指数
2
解决办法
5130
查看次数

NHibernate中映射视图的策略

似乎NHibernate需要将一个id标记指定为映射的一部分.这给视图带来了问题,因为大多数时候(根据我的经验)视图都没有Id.我之前在nhibernate中映射了视图,但是我这样做的方式对我来说似乎很混乱.

这是我目前如何做的一个人为的例子.

制图

  <class name="ProductView" table="viewProduct" mutable="false" >
    <id name="Id" type="Guid" >
      <generator class="guid.comb" />
    </id>
    <property name="Name" />
<!-- more properties -->
  </class>
Run Code Online (Sandbox Code Playgroud)

查看SQL

Select NewID() as Id, ProductName as Name, --More columns
From Product  
Run Code Online (Sandbox Code Playgroud)

public class ProductView
{
    public virtual Id {get; set;}
    public virtual Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我不需要产品的ID或者在某些视图的情况下我可能没有视图的ID,这取决于我是否可以控制View

有没有更好的方法将视图映射到nhibernate中的对象?

编辑
答案到目前为止

制图

  <class name="ProductView" table="viewProduct" mutable="false" >
    <id name="Id" type="Guid" />
    <property name="Name" />
    <!-- more properties -->
  </class>
Run Code Online (Sandbox Code Playgroud)

 public class ProductView …
Run Code Online (Sandbox Code Playgroud)

nhibernate views nhibernate-mapping

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

如何使用NHibernate映射没有setter且没有后备属性的属性?

假设我有以下实体:

public class CalculationInfo
{
    public virtual Int64 Id { get; set; }

    public virtual decimal Amount { get; set; }

    public virtual decimal SomeVariable { get; set; }

    public virtual decimal SomeOtherVariable { get; set; }

    public virtual decimal CalculatedAmount
    { 
        get
        {
            decimal result;

            // do crazy stuff with Amount, SomeVariable and SomeOtherVariable

            return result;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我想用NHibernate读取和写入我的数据库的所有字段,除了CalculatedAmount,我只是想写,而不是回读.

每个类似的问题和相应的答案都涉及为值指定一个后备存储,我在这种情况下不会有.

如何使用Fluent NHibernate完成此操作?

谢谢!

更新: 这是我尝试过的,以及它导致的错误:

这是我对该物业的映射......

Map(x => x.CalculatedAmount)
      .ReadOnly();
Run Code Online (Sandbox Code Playgroud)

它产生的例外......

无法在类'xxx.CalculationInfo'中找到属性'CalculatedAmount'的setter

nhibernate nhibernate-mapping fluent-nhibernate

8
推荐指数
2
解决办法
2669
查看次数

如何使用Fluent NHibernate映射自引用文件夹层次结构?

我有一个由以下类表示的文件夹层次结构:

public class Folder
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Folder ParentFolder { get; set; }
    public virtual ICollection<Folder> SubFolders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

换句话说,每个都Folder可以属于一个ParentFolder,也可以属于SubFolders它.我正在使用Fluent NHibernate Automapper并使用自动生成数据库模式SchemaExport.当我尝试保存一些测试文件夹时,我得到下表:

Id | Name                        | ParentFolder_id | Folder_id
----------------------------------------------------------------
1  | Root Folder (has children)  | NULL            | NULL
2  | Root Folder (no children)   | NULL            | NULL
3  | …
Run Code Online (Sandbox Code Playgroud)

c# mapping nhibernate nhibernate-mapping fluent-nhibernate

8
推荐指数
1
解决办法
2795
查看次数

NHibernate:为什么要使用<composite-element>而不是<one-to-many>来映射集合

使用NHibernate时,在什么情况下你会选择使用复合元素映射集合来提供值对象的集合,而不是创建一个完整的实体并使用一对多映射它?

您可能有一个值类型类'PostalAddress'来表示地址.如果您有一个人实体,并且每个人可以拥有许多地址,您可以像这样映射这种关系(选项1):

<bag name="Addresses" table="PersonAddress">
    <key column="PersonID"/>
    <composite-element class="PostalAddress">
        <property name="StreetAddress"/>
        <property name="Town"/>
        <property name="City"/>
        <property name="Postcode"/>
    </composite-element>
</bag>
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个实体"PersonAddress",其上有一个"PostalAddress"类型的属性,并使用一对多关联映射地址(选项2):

<bag name="Addresses">
    <key column="PersonID"/>
    <one-to-many class="PersonAddress"/>
</bag>

<class name="PersonAddress">

    <id name="Id">
        <generator class="native"/>
    </id>

    <component name="Address" class="PostalAddress">
        <property name="StreetAddress"/>
        <property name="Town"/>
        <property name="City"/>
        <property name="Postcode"/>
    </component>

</class>
Run Code Online (Sandbox Code Playgroud)

是否有任何理由不做选项1?PersonAddress表有ID列的事实是否应该是一个实体本身,因此使用选项2?

nhibernate nhibernate-mapping

8
推荐指数
1
解决办法
3739
查看次数

如何在Fluent NHibernate中通过命名空间添加映射

在我的应用程序中,我需要与多个数据库进行通信.我在NHibernate中通过为每个数据库创建一个SessionFactory来处理它(我认为这是正确的事情).所以我有两组模型(每个数据库一个)和两组Fluent NHibernate ClassMap<>映射.两者都在同一个项目中(由命名空间分隔),我想保持这种方式.

创建SessionFactory时出现问题.据我所知,Fluent NHibernate基本上有两种添加映射的方法:

    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserClassMap>())
    .Mappings(m => m.FluentMappings.Add<UserClassMap>()
Run Code Online (Sandbox Code Playgroud)

如果我使用第一个重载,那么我的会话工厂将获得两个数据库的所有映射.如果我使用第二个,我必须指定每个单独的ClassMap.我喜欢类似的东西FluentMappings.AddFromNamespace().有没有办法做到这一点?

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

8
推荐指数
2
解决办法
8249
查看次数

两个表oneToMany的FluentNhibernate映射在映射中使用唯一的主键instea

我正在用C#编写桌面项目.我正在使用Nhibernate与数据库进行通信.此外,我使用FluentNhibernate进行模型映射,但我陷入了映射的某些部分.这是ProductMap中的My mapping Class

松动地图

   public LosingMap()
        {
            Id(x => x.id);
            Map(x => x.reason);
            Map(x => x.quantity);
            Map(x => x.lose_sum);
            Map(x => x.rate);
            Map(x => x.deleted);
            Map(x => x.create_date);
            Map(x => x.update_date);
            References(x => x.currency).Column("CurrencyCode");
            Table("Loosing");


        }
    }
Run Code Online (Sandbox Code Playgroud)

这是CurrencyMap

CurrencyMap

public CurrencyMap()
    {

        Id(x => x.id);
        Map(x => x.code).UniqueKey("currency_code");


        Map(x => x.name);
        Map(x => x.shname);
        Map(x => x.symbol);
        Map(x => x.deleted);
        HasMany(x => x.Losings).Cascade.All();
        Table("currency");
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是我在我的货币表中有一个主键和一个唯一键我怎么能在我的LoosingMap类中引用我的唯一而不是主键???

c# nhibernate nhibernate-mapping fluent-nhibernate

8
推荐指数
1
解决办法
109
查看次数

为什么NHibernate会在ISession.Refresh期间抛出"GenericADOException:无法初始化集合"异常?

我一直在经历一种奇怪的行为(至少对我而言)ISession.Refresh().

我有一个带有延迟加载的子集合的实体,以及一个访问此集合的只读属性,它们都包含在二级缓存中.ISession.Refresh()在将事务提交到DB后,我在长会话中使用以获取最新数据,并获得以下错误:

NHibernate.Exceptions.GenericADOException : could not initialize a collection: [Test.NUnit.DBTest.TestModel.ParentTestEntity.Children#d4251363-cf88-4684-b65a-9f330107afcf][SQL: SELECT children0_.ParentTestEntity_id as ParentTe4_1_, children0_.Id as Id1_, children0_.Id as Id42_0_, children0_.RowVersion as RowVersion42_0_, children0_.Parent_id as Parent3_42_0_ FROM "ChildTestEntity" children0_ WHERE children0_.ParentTestEntity_id=?]
  ----> System.NullReferenceException : Object reference not set to an instance of an object.
    at NHibernate.Loader.Loader.LoadCollection(ISessionImplementor session, Object id, IType type)
    at NHibernate.Loader.Collection.CollectionLoader.Initialize(Object id, ISessionImplementor session)
    at NHibernate.Persister.Collection.AbstractCollectionPersister.Initialize(Object key, ISessionImplementor session)
    at NHibernate.Event.Default.DefaultInitializeCollectionEventListener.OnInitializeCollection(InitializeCollectionEvent event)
    at NHibernate.Impl.SessionImpl.InitializeCollection(IPersistentCollection collection, Boolean writing)
    at NHibernate.Collection.AbstractPersistentCollection.Initialize(Boolean writing)
    at NHibernate.Collection.AbstractPersistentCollection.ReadSize()
    at NHibernate.Collection.PersistentBag.get_Count() …
Run Code Online (Sandbox Code Playgroud)

nhibernate lazy-loading nhibernate-mapping

7
推荐指数
1
解决办法
5086
查看次数