标签: fluent-nhibernate

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
查看次数

NHibernte Fluent 与 XML 映射

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

nhibernate nhibernate-mapping fluent-nhibernate

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

如何在 Fluent nHibernate 中对 HasMany 映射进行额外过滤?

在我正在进行的一个项目中,我有四个实体(以及其他一些实体),WorkOrder、Crew、CrewAssignment 和 Contractor。他们的关系是这样的:

  • 一个工作订单有一个承包商,可以更改
  • 一个船员只有一个承包商
  • 一个 CrewAssignment 只有一个 Crew
  • 一个工作订单有许多 CrewAssignments

我遇到的问题是设置 WorkOrder 可以有多个 CrewAssignments 的最后一部分。我想要做的是确保 WorkOrder.CrewAssignments 属性只返回与工作订单具有相同承包商的 CrewAssignments。或者,不那么冗长,“WorkOrder.Contractor == CrewAssignment.Crew.Contractor”。

我唯一能想到的就是这个,但它抛出了一个关于 x 变量未定义的异常。

HasMany(x => x.CrewAssignments).KeyColumn("WorkOrderID").Where(x => x.Crew.Contractor == x.WorkOrder.Contractor);
Run Code Online (Sandbox Code Playgroud)

做这样的事情甚至可能吗?还是我完全在错误的树上吠叫?谷歌整个上午都在用这个让我失望。有任何想法吗?

c# nhibernate fluent-nhibernate

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

Newtonsoft.Json.dll 中发生 NHibernate.LazyInitializationException

我无法序列化然后立即反序列化大对象而不会出现问题。我遵循以下建议: JSON.NET 和 nHibernate 集合延迟加载JSON.Net NHibernate 代理序列化 (NH 3.3.2.4000),以使 Json.Net 与我的遗留系统一起工作。尽管尝试了这些建议并进行了各种组合,但我没有成功。以下是我理解的对我来说最有意义的设置。

转换器:

protected override List<MemberInfo> GetSerializableMembers(Type objectType)
{
    if (typeof(INHibernateProxy).IsAssignableFrom(objectType))
    {
        return base.GetSerializableMembers(objectType.BaseType);
    }
    else
    {
        return base.GetSerializableMembers(objectType);
    }
}
Run Code Online (Sandbox Code Playgroud)

主要代码:

    var jsonSerializerSettings = new JsonSerializerSettings
    {
        ContractResolver = new NHibernateContractResolver(),
        PreserveReferencesHandling = PreserveReferencesHandling.All,
        TypeNameHandling = TypeNameHandling.Auto,
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        ObjectCreationHandling = ObjectCreationHandling.Replace
    };

    string serialisedEnquiry = JsonConvert.SerializeObject(enquiry, Formatting.Indented, jsonSerializerSettings);

    Enquiry enq = JsonConvert.DeserializeObject<Enquiry>(serialisedEnquiry, jsonSerializerSettings);
Run Code Online (Sandbox Code Playgroud)

我还有另一个开放的问题,可能值得注意:JSON.net null property 尽管正如您将在最后一条评论中看到的那样,我相信我已经解决了它。我只是在等待解决这个问题,以确认另一个问题已修复,而不是简单地被这个新错误埋葬/替换。

流畅的 NHibernate 1.4.0.0

NHibernate 3.3.1.4000

Netwonsoft.Json 6.0.0.0 …

c# fluent-nhibernate json.net

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


流利的NHibernate HasManyToMany和NotFound

我有以下FNH映射片段:

HasManyToMany((c) => c.Plaintiffs)
    .LazyLoad()
    .WithTableName("invoicePlantiff")
    .WithChildKeyColumn("PersonReferenceID")
    .WithParentKeyColumn("invoiceID")
    .FetchType.Join();
Run Code Online (Sandbox Code Playgroud)

产生以下HBM:

<bag name="Plaintiffs" access="iServe.Design.CslaNHibernate.CslaChildPropertyAccessor, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="true" table="invoicePlantiff">
  <key column="invoiceID" />
  <many-to-many column="PersonReferenceID" class="iServe.PersonReference, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" fetch="join" />
</bag>
Run Code Online (Sandbox Code Playgroud)

问题是我正在处理遗留数据,我们只是说'不太理想',而且有些记录有无效的ID,所以我需要将not-found="ignore"属性放在包中的多对多标签上.我没有看到任何方法来实现这一点与FNH.

还有就是.NotFound.Ignore()References()通话,但不是在HasManyToMany通话.

有人能告诉我我错过了什么吗?即使在渲染之后"注入"属性是一个黑客攻击/在配置NH之前很好,我只需要它就可以工作了.

提前致谢.

UPDATE gcores答案不起作用,它将其添加到错误的标签,请参阅我对其答案的评论以获取更多信息.

nhibernate nhibernate-mapping fluent-nhibernate

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

获取NHibernate以生成HiLo字符串ID

我们有一个庞大的系统通过Unity与其数据源(Navision)松散绑定 - 我们有机会将其交换出来并拥有自己的数据库.

所以我们已经浏览了一下,并且非常喜欢Fluent NHibernate的外观 - 我们试图获得概念验证并交换掉一些服务.

我们想要使用NHibernates HiLo算法 - 不幸的是我们从Navision继承了字符串ID,它的ID是前缀(例如COL00001),所以要匹配我们需要使用字符串Id的接口.

有谁知道我会怎么样......

Id(x => x.ID).GeneratedBy.HiLo("100");
Run Code Online (Sandbox Code Playgroud)

在ID是字符串的地方工作?我们目前正在获取Identity必须是int,long等

谢谢,

安迪

------更新------

我在文章建议中尝试了这个例子但是这个功能已经从Fluent NHibernate的更高版本中删除了 - 但是有一个.Custom - 但我似乎无法让它工作!

public class ManufacturerMap : ClassMap<Manufacturer>
{
    public ManufacturerMap()
    {
        Id(x => x.ID).GeneratedBy.Custom(typeof(StringTableHiLoGenerator));
        Map(x => x.Name);
    }
}


public class StringTableHiLoGenerator : TableHiLoGenerator
{
    public override object Generate(ISessionImplementor session, object obj)
    {
        return base.Generate(session, obj).ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# nhibernate interface fluent-nhibernate loose-coupling

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

OOP - 以Person为基础建模Client和Employees类

抱歉,如果已经问过这个问题但是,我看了一眼,找不到任何东西.我试图找出在C#中模拟以下内容的最佳方法.我勾勒出了一些想法,但没有一个感觉正确.

我创建了一个抽象的'Person'类.我的应用程序将拥有客户和员工.显然,客户是个人员工是个人

  • 员工不一定是客户.
  • 即使客户最初没有设置为员工,客户也可以成为员工.
  • 员工可以成为客户
  • 一个人可以不再是员工,但仍然是客户
  • 一个人可以不再是客户,但仍然是员工

最后,我想使用Fluent NHibernate进行映射.我一直认为这应该很简单,我只是不直接思考,但是我可以使用哪种模式来解决这个问题.

谢谢.

c# oop fluent-nhibernate

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

是否可以在NHibernate中智能地映射DTO?

如果我想从类的属性创建DTO,所有这些都被映射,我可以不编写常规SQL语句吗?

我已经看过很多关于制作DTO课程以及使用它的文档,但关于它是如何创建的并不多.我见过与Transformer一起使用的SQL查询,但这需要使用魔术字符串.

编辑:

感谢您的评论.我知道有多种方法可以检索DTO,但我一直无法找到不使用SQL/HQL的方法示例.是否有某个地方的参考,或者这是NHibernate稀疏记录的区域之一?

nhibernate fluent-nhibernate

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

如何使用Fluent NHibernate创建一个IN子句

在这里,我获得了一个代表可以访问的代理商列表.

var agencies = _session.QueryOver<AgencyRep>()
    .JoinQueryOver<AgencyRepsSecondaryAgency>(r => r.AgencyRepsSecondaryAgencies)
    .Where(a => a.AgencyRepId == user.Id)
    .List();
Run Code Online (Sandbox Code Playgroud)

在我得到我的代理商列表之后,我想进行SQL搜索,其中值为agencies.id列.

var data = _session.QueryOver<Staging.Case>()
                .Where(x => x.AgencyId ???? agencies)
                .List();
Run Code Online (Sandbox Code Playgroud)

不知道如何用流利的nhibernate实现这样的东西.任何帮助将不胜感激.

c# nhibernate fluent-nhibernate

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