标签: nhibernate-mapping

nhibernate映射:不再引用具有cascade ="all-delete-orphan"的集合

我正在使用流利映射的一些probs.我有一个实体与实体的子集合,例如Event和EventItems.

如果我将集合的级联映射设置为AllDeleteOrphan,则在将新实体保存到数据库时会出现以下错误:NHibernate.HibernateException:拥有实体实例不再引用具有cascade ="all-delete-orphan"的集合:Core.Event.EventItems

如果我将级联设置为All,它可以正常工作吗?以下是我的类和映射文件:

 public class EventMap : ClassMap<Event>
{
    public EventMap()
    {
        Id(x => x.Id, "Id")
            .UnsavedValue("00000000-0000-0000-0000-000000000000")
            .GeneratedBy.GuidComb();

        Map(x => x.Name);
        HasMany(x => x.EventItems)
            .Inverse()
            .KeyColumn("EventId")
            .AsBag()
            .Cascade.AllDeleteOrphan();
    }
}

  public class EventItemMap : SubclassMap<EventItem>
{
    public EventItemMap()
    {
         Id(x => x.Id, "Id")
            .UnsavedValue("00000000-0000-0000-0000-000000000000")
            .GeneratedBy.GuidComb();
        References(x => x.Event, "EventId");
    }
}



public class Event : EntityBase
{
    private IList<EventItem> _EventItems;

    protected Event()
    {
        InitMembers();
    }

    public Event(string name)
        : this()
    {
        Name = name;
    }

    private void InitMembers()
    { …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

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

属性nhibernate中的访问策略

我可以在nhibernate xml的属性访问中使用哪些访问策略?
有人能指出我可能使用的值吗?
一个很好的教程将非常感激.
谢谢

nhibernate nhibernate-mapping

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

在nhibernate中刷新实体的最佳方法是什么?

我想刷新一个实体及其所有子集合.做这个的最好方式是什么?我在谈论nhibernate :)

我已经阅读了session.Evict,session.Refresh ...

但我仍然不确定是否喜欢:

RefreshEntity<T>(T entity)
{
 session.Evict(entity);
 session.Refresh(entity);
}
Run Code Online (Sandbox Code Playgroud)

会完全按照我希望的方式工作

它会起作用吗?如果不是我还能做什么?

nhibernate session refresh nhibernate-mapping

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

流利的Nhibernate离开加入

我想映射一个导致左外连接而不是内在连接的类.

我的复合用户实体由一个表("aspnet_users")和第二个表中的一些可选属性(如"users"中的FullName)组成.

  public class UserMap : ClassMap<User> {
    public UserMap() {
        Table("aspnet_Users");
        Id(x => x.Id, "UserId").GeneratedBy.Guid();
        Map(x => x.UserName, "UserName");
        Map(x => x.LoweredUserName, "LoweredUserName");

       Join("Users",mm=>
                        {
                            mm.Map(xx => xx.FullName);

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

这个映射结果在内连接选择中,所以没有结果出来是第二个表没有数据.我想生成一个左连接.

这只能在查询级别进行吗?

nhibernate-mapping fluent-nhibernate

17
推荐指数
1
解决办法
8604
查看次数

从流畅的Nhibernate生成XML映射

如何在MappingIntegrationTests中作为测试的一部分生成xml映射文件

我需要手动检查流畅的映射是否与leagcy项目中的映射关联.

nhibernate nhibernate-mapping fluent-nhibernate s#arp-architecture

17
推荐指数
2
解决办法
7418
查看次数

NHibernate:如何在一对一映射上启用延迟加载

nhibernate中的一对一关系可以延迟加载"false"或"proxy".我想知道是否有人知道如何做一个懒惰的一对一映射.

我通过使用映射到私有字段的惰性集来实现相同的结果,并使公共属性返回该集的第一个结果.它有效,但不是最干净的代码......

提前致谢!

nhibernate nhibernate-mapping

16
推荐指数
1
解决办法
9714
查看次数

NHibernate 2.*映射文件:如何定义可空的DateTime类型(DateTime?)?

我知道NHibernate 2的一个重大变化是*不再支持NHibernate.Nullables.因此,您在映射文件中使用什么来映射可为空的DateTime?类型?对于ie:

可以理解的是不起作用:

<property name="CreateDate" column="CreateDate" type="DateTime?" not-null="false" />
Run Code Online (Sandbox Code Playgroud)

不再支持:

<property name="ModifiedDate" column="ModifiedDate" type="Nullables.NHibernate.NullableDateTimeType, Nullables.NHibernate" not-null="false"/>
Run Code Online (Sandbox Code Playgroud)

我知道它一定很明显,但我找不到它!

答案很简单:NHibernate会反映出有问题的类,并发现该属性的反射类型是DateTime?一切都靠自己.

谢谢@Justice!

nhibernate datetime nullable nhibernate-mapping

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

如何在NHibernate hbm.xml映射文件中映射VARCHAR(MAX)列

我们有一个带有varchar和nvarchar max列的SQL Server表,如下所示:

CREATE TABLE [dbo].[MyTable](
  :
  [MyBigUnicodeColumn] [nvarchar](max) NULL,
  [MyBigAnsiColumn]    [varchar](max) NULL,
  :
Run Code Online (Sandbox Code Playgroud)

在创建映射(hbm.xml)文件时,文档说使用StringClob作为数据库类型为DbType.String的大对象的type属性,但它没有说明如果数据库类型是DbType.AnsiString该怎么办.

<class name="MyTable" table="MyTable" lazy="false">
  :
  <property name="MyBigUnicodeColumn" type="StringClob" />
  <property name="MyBigAnsiColumn" type="????" />
  :
Run Code Online (Sandbox Code Playgroud)

这适用于NHibernate 3.3.1.

nhibernate nhibernate-mapping

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

NHibernate - Cascade Merge到子实体对于分离的父实体失败

目前的方法

在ASP.NET Web表单应用程序(使用Spring.NET和NHibernate)中,我们有一个聚合根(Person),其详细信息可以在多个屏幕/页面中捕获.的在进入到该工作流的实体存在,并且对所有变更对象图是原子的,因此只应在提交最终屏幕的刷新到数据库.

为了实现这一点,我们首次使用NHibernate 3.2将数据库中的Person(懒惰)加载到第一页,然后在我们浏览过程时加载并将序列化的Person对象图保存到HTTP Session变量中.

检索后的人出了HTTP会话,它是从当前的NHibernate会话的分离状态,所以我们重新连接通过调用更新()在当前会话的方法,就像这样:

var sessionPerson = Session[PersonSessionName] as Person;
var currentSession = SessionFactory.GetCurrentSession();
currentSession.Update(sessionPerson);
Run Code Online (Sandbox Code Playgroud)

注意:使用Lock()引发异常,建议"重新关联的对象有脏集".

重新连接时,我们可以按预期遍历对象图,从数据库中提取尚未加载到内存中的子实体的数据.

映射文件的子集

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false" assembly="Domain" namespace=" TestApp.Domain">
  <class name="Person" table="Person">
    <id name="Id">
      <generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" />
    </id>
    <property name="Name" not-null="false" />

    <bag name="PersonCountries" access="field.camelcase-underscore" cascade="all-delete-orphan">
      <key column="PersonId" foreign-key="FK_ PersonCountry_Person" not-null="true" />
      <one-to-many class="PersonCountry" />
    </bag>
  </class>

  <class name="Country" table="Country">
    <id name="Id">
      <generator class="TestApp.CustomNHibernateHiLoGenerator, TestApp.Core" …
Run Code Online (Sandbox Code Playgroud)

c# asp.net nhibernate spring.net nhibernate-mapping

16
推荐指数
1
解决办法
3117
查看次数

NHibernate动态更新缺点?

是否有理由不使用dynamic-insert/ dynamic-update用于NHibernate?我问的唯一原因是它似乎是我想要启用的默认设置,而不是我必须配置的东西.

使用这些动态属性时是否有任何问题需要注意?

nhibernate nhibernate-mapping

16
推荐指数
2
解决办法
6733
查看次数