标签: nhibernate-mapping

NHibernate中未映射的列?

我正在使用Oracle中的遗留数据库,我的一些表中的列设置为NOT-NULL,我不想在我的域模型中使用,但是,显然,我需要在某处指定至少一些默认值保存到数据库(例如,Groups表可能有一个"Indentation"列,因为thaqt总是需要char(8)值).

我将如何在NHibernate中进行此操作?是否有捷径可寻?如果没有,有没有人知道我可以这样做的方式(我已经考虑过使用Inteceptor,但实际上不知道从哪里开始......).我无法更改数据库架构,所以这可能不是一个选项(流畅的版本也可以......).

nhibernate nhibernate-mapping fluent-nhibernate

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

nhibernate:映射到主键以外的列

我有以下地图.我的意图是order.BasketId映射到orderItem.BasketId.当我看到sql时,我看到它的映射顺序.Id to orderItem.BasketId.如何在我的订单映射中定义要针对basketId映射的订单属性.它似乎默认为主键.

 <class name="Order" table="Orders">
    <id name="Id" type="Int32" column="Order_ID" unsaved-value="0">
      <generator class="identity"/>
    </id>

    <property name="BasketId" column="Basket_ID" type="Int32"/>
    <set name="OrderItems" table="item_basket_contents" generic="true" inverse="true"  >
      <key column="Basket_ID" />
     <one-to-many class="EStore.Domain.Model.OrderItem, EStore.Domain"/>      
    </set>
  </class>
Run Code Online (Sandbox Code Playgroud)

和orderItem

  <class name="OrderItem" table="Item_Basket_Contents">
    <id name="Id" type="Int32" column="ID" unsaved-value="0">
      <generator class="identity"/>
    </id>

    <property name="BasketId" column="Basket_ID" type="Int32"/>
  </class>
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping

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

nhibernate:如何初始化子列表对象

我的存储库中有以下方法.这工作正常,我的orderItems按预期初始化,但orderItems包含另一个名为OrderItemAddress的集合.这些都没有初始化.我该怎么办?

public Model.Order Get(int id)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        Model.Order order = session
            .CreateCriteria(typeof(Model.Order))
            .Add(Restrictions.Eq("Id", id))
            .UniqueResult<Model.Order>();

        NHibernateUtil.Initialize(order.OrderItems);
        return order;
    }
}
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping

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

不需要的NHibernate更新命令

我有以下课程

public class Contact
{
    public Contact() {
        Addresses = new List<Address>();
        EmailAddresses = new List<EmailAddress>();
        PhoneNumbers = new List<PhoneNumber>();
    }
    public virtual int ContactID { get; private set; }
    public virtual Firm Firm { get; set; }
    public virtual ContactType ContactType { get; set; }
    public virtual string FullName { get; set; }
    public virtual string FiscalCode { get; set; }
    public virtual string Notes { get; set; }
    public virtual ContactRole ContactRole { get; set; }

    public virtual …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

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

Fluent NHibernate:如何在两个方向上进行一对多引用?

我们的系统上有用户人员。每个用户有很多人。但是当用户登录时,我们需要查找他的主要人员记录以填写他的姓名、地址、电话等。

public class Person
{
    /// <summary>Every Person belongs to a user.</summary>
    public virtual User User { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string Address { get; set; }
    public virtual string Phone { get; set; }
    // More methods & Properties
}

public class User : Entity
{
    public virtual string Username { get; set; }
    public virtual string Password …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate-mapping fluent-nhibernate

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

验证NHibernate是否延迟加载了多对一属性

我有一个项目和一个人(有点简化):

public class Project
{
    public virtual Person CreatedBy { get; set; }
}

public class Person
{
    public virtual string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在与NH Linq合作一个项目:

var projects = from p in session.Query<Project>()
             select p;
var project = projects.First();
Run Code Online (Sandbox Code Playgroud)

有时使用Fetch()

var project = projects.Fetch(p => p.CreatedBy).First();
Run Code Online (Sandbox Code Playgroud)

现在,我怎样才能在一个单元测试验证project.CreatedBy 不是急切装载(和反向),这取决于如果取(),使用?在我的理解中,使用Fetch()应该急切加载Person,如果我不使用Fetch(),它应该延迟加载Person.

我试过了

Assert.IsTrue(NHibernateUtil.IsInitialized(project.CreatedBy));
Run Code Online (Sandbox Code Playgroud)

NHibernateUtil.IsPropertyInitialized(project, "CreatedBy")
Run Code Online (Sandbox Code Playgroud)

但是无论我是否使用Fetch(),它们都返回true.IsInitialized()适用于集合(一对多),例如Person.Projects,但不适用于多对一...

CreatedBy属性应该是延迟加载的,但有时我希望它被急切加载,我希望单元测试确认它正在按预期工作.

CreatedBy属性的映射是

<many-to-one name="CreatedBy" class="Person" fetch="select">
  <column name="PERSON_ID" precision="10" scale="0" not-null="true" />
</many-to-one>
Run Code Online (Sandbox Code Playgroud)

我验证了这样的映射:

var to1 = NHibernateConfiguration.GetClassMapping(typeof(Project))
    .ReferenceablePropertyIterator.FirstOrDefault(p => …
Run Code Online (Sandbox Code Playgroud)

nhibernate lazy-loading nhibernate-mapping

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

NHibernte Fluent 与 XML 映射

我看到围绕 NH Fluent 接口产生了很多嗡嗡声,那么使用 Fluent 而不是 XML 映射和 Criteria API 有什么好处?

nhibernate nhibernate-mapping fluent-nhibernate

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

如何正确使用NHibernate By Code来获取Oracle中的下一个序列?

我有以下内容:

  Id(x => x.ID, m =>
                                {
                                    m.Column("IDUSER");
                                    m.Generator(Generators.Sequence);
                                });
Run Code Online (Sandbox Code Playgroud)

但是如何指定序列名称?

nhibernate nhibernate-mapping

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

MappingException:没有持久化器 - NHibernate - 持久化适配器

好吧,我用谷歌搜索了很多,发现了相同的建议(将 hbm 设置为嵌入式资源,在 hibernate.cfg 中添加 hbm 等),尽管如此,我仍然不明白。

让我解释一下:我为检票口设备编写了一个通信 Dll,其中有一个配置模型类,我用它通过 TCP/IP 配置该设备。但现在,我必须将这个对象持久保存在数据库上,因此我在模型中编写了一个适配器,将一个对象粘合到另一个对象上。这样,我就有了一个适用于我的配置模型的适配器,其中包含 ID、InclusionDate 等。让我们来看看:

DeviceConf 模型类:

public class DeviceConf : BaseModel // which have ID, IncludedDate, etc
{
    private TGCommHelper.Entities.Configuration.TicketGateConfig _conf;

    public TGCommHelper.Entities.Configuration.TicketGateConfig conf
    {
        get { return _conf; }
        private set { _conf = value; }
    }
    public DeviceConf()
    {
        conf = new TGCommHelper.Entities.Configuration.TicketGateConfig();
    }
    public DeviceConf(TGCommHelper.Entities.Configuration.TicketGateConfig config){
        conf = config;
    }

    public virtual string IP
    {
        get { return conf.IP; }
        set { conf.IP = value; }
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate persistence nhibernate-mapping

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

NHibernate 将过滤器应用于袋子

我有一个在 XML 中映射的父/子关系。一个 Booking 可以有很多付款,所以我的 Booking 模型有一个 IList Payments {get;set;} 属性,我将它映射到 XML 中,如下所示:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
</bag>
Run Code Online (Sandbox Code Playgroud)

这很好用,但现在我需要引入软删除的概念,所以我在 Payment 中添加了一个 Deleted bool 列,我希望 Payments on Booking 只包含未删除的,所以我想做像这样:

<bag name="Payments" inverse="true">
  <key column="BookingId"/>
  <one-to-many class="Payment, NHibernateOneToMany"/>
  <sql>SELECT * FROM Payment WHERE Deleted = 0 AND BookingId = bookingId</sql>
</bag>
Run Code Online (Sandbox Code Playgroud)

我已经研究过使用过滤器,但它们似乎只提供在启用的情况下使用过滤器的能力 - 我希望这个属性每次都排除所有已删除的项目,这样就不会出现错误。

实现这一目标的最佳方法是什么?

nhibernate nhibernate-mapping

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