带有动态 where 子句的 Nhibernate ManyToMany

发布于 2024-09-28 07:05:02 字数 1359 浏览 1 评论 0原文

我在映射 fluencenhibernate 中复杂的多对多关系时遇到一些问题。我有一个遗留数据库,看起来像这样:

Foos: |身份证 |福 |

FooBars: |食品|酒吧ID |

酒吧: |身份证 |酒吧|文化ID |

我正在尝试将其映射到以下对象模型:

class Foo
{
   property virtual int Id { get; set; }
   property virtual string Foo { get; set; }
   property virtual IList<Bar> Bars { get; set; }
}

class Bar
{
   property virtual int Id { get; set; }
   property virtual int CultureId { get; set; }
}

使用映射:

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Table("foos");
        Id(v => v.Id);
        Map(v => v.Foo);

        HasManyToMany(v => v.Bars)
            .Table("FooBars")
            .ParentKeyColumn("FooId")
            .ChildKeyColumn("BarId")
            .Cascade.All();
    }
}

public class BarMapping : ClassMap<Bar>
{
    public BarMapping()
    {
        Table("bars");
        Id(v => v.Id);
        Map(v => v.Bar);
        Map(v => v.CultureId);
    }
}

问题是我有多个具有相同 Id 的 Bar,用于不同的 CultureId,

例如

我将有一个如下所示的表:

Id|Bar|CultureId

1,Hello,1

1, Bonjour, 2

1, Gutentag, 3

目前,上表的 Bars 属性将返回 3 个元素,但其 Bar 属性将为所有三个元素返回“Hello”(大概是因为它们都具有相同的标识) 。所以我的问题是,我怎样才能阻止这种情况发生或者任何人都可以建议一种过滤没有正确区域性ID的行的方法(注意,这是动态的并且基于当前的区域性) ?

I'm having some issues mapping a complex many to many relationship in fluentnhibernate. I have a legacy db which looks something like this:

Foos: | Id | Foo |

FooBars: | FooId | BarId |

Bars: | Id | Bar | CultureId |

which I am trying to map to the following object model:

class Foo
{
   property virtual int Id { get; set; }
   property virtual string Foo { get; set; }
   property virtual IList<Bar> Bars { get; set; }
}

class Bar
{
   property virtual int Id { get; set; }
   property virtual int CultureId { get; set; }
}

with the mappings:

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Table("foos");
        Id(v => v.Id);
        Map(v => v.Foo);

        HasManyToMany(v => v.Bars)
            .Table("FooBars")
            .ParentKeyColumn("FooId")
            .ChildKeyColumn("BarId")
            .Cascade.All();
    }
}

public class BarMapping : ClassMap<Bar>
{
    public BarMapping()
    {
        Table("bars");
        Id(v => v.Id);
        Map(v => v.Bar);
        Map(v => v.CultureId);
    }
}

The problem is I have multiple Bar's with the same Id for different CultureIds

e.g.

I would have a table that looks like:

Id|Bar|CultureId

1, Hello, 1

1, Bonjour, 2

1, Gutentag, 3

At the moment, the Bars property for the above table will return 3 elements but the Bar property on it will return "Hello" for all three elements (presumably because they all have the same identity). So my question is, how can I either stop this happening or can anyone suggest a way of filtering rows that do not have the correct culture id (note, this is dynamic & based on the current culture)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天荒地未老 2024-10-05 07:05:02

您无法在映射中创建动态 where 子句。您将需要使用 Criteria 或 HQL 查询查询此集合,而不是通过父集合访问它。您可以阅读过滤器,但它们仍然需要一个查询。

You can't create dynamic where clauses in your mappings. You're going to need to query this collection instead of accessing it via the parent, using a Criteria or HQL query. You could read up on filters, but they still require a query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文