gpt4 book ai didi

nhibernate - FluentNHibernate,从另一个表中获取 1 列

转载 作者:行者123 更新时间:2023-12-03 20:32:02 25 4
gpt4 key购买 nike

我们正在使用 FluentNHibernate,但遇到了一个问题,即我们的对象模型需要来自两个表的数据,如下所示:

public class MyModel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int FooId { get; set; }
public virtual string FooName { get; set; }
}

其中有一个 MyModel 表,它具有 Id、Name 和 FooId 作为 Foo 表的外键。 Foo 表包含Id 和FooName。

这个问题与这里的另一个帖子非常相似: Nhibernate: join tables and get single column from other table但我想弄清楚如何使用 FluentNHibernate 来做到这一点。

我可以很容易地制作 Id、Name 和 FooId……但是我在映射 FooName 时遇到了麻烦。这是我的类(class) map :
public class MyModelClassMap : ClassMap<MyModel>
{
public MyModelClassMap()
{
this.Id(a => a.Id).Column("AccountId").GeneratedBy.Identity();
this.Map(a => a.Name);
this.Map(a => a.FooId);

// my attempt to map FooName but it doesn't work
this.Join("Foo", join => join.KeyColumn("FooId").Map(a => a.FooName));
}
}

使用该映射,我收到此错误:

命名空间“urn:nhibernate-mapping-2.2”中的元素“class”在命名空间“urn:nhibernate-mapping-2.2”中的子元素“join”无效。预期的可能元素列表:命名空间“urn:nhibernate-mapping-2.2”中的“joined-subclass、loader、sql-insert、sql-update、sql-delete、filter、resultset、query、sql-query”。

有任何想法吗?

最佳答案

我想你在这里误解了一些东西。

您需要创建两个类,而不是在同一个类中包含 Id、Name、FooId 和 FooName

public class MyModel
{
public virtual int Id { get; set; }

public virtual string Name { get; set; }

public virtual Foo Foo { get; set; }
}

public class Foo
{
public virtual int Id { get; set; }

public virtual string FooName { get; set; }
}

以及您的映射类:
public class MyModelMapping : ClassMap<MyModel>
{
public MyModelMapping()
{
this.Id(x => x.Id);
this.Map(x => x.Name);
this.References(x => x.Foo);
}
}

public class FooMapping : ClassMap<Foo>
{
public FooMapping()
{
this.Id(x => x.Id);
this.Map(x => x.FooName);
}
}

这应该有帮助。

但请记住约定其他配置:)

关于nhibernate - FluentNHibernate,从另一个表中获取 1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2930968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com