【问题标题】:Mapping this design in Fluent NHibernate在 Fluent NHibernate 中映射此设计
【发布时间】:2012-07-10 19:17:52
【问题描述】:

我正在尝试找出完成 NHibernate 坚持的设计的最佳方式。以下是数据的理想状态:

Person
===============
Id (int)
Name (nvarchar)


Privileges
==============
Person_Id
Right (int)
AccessLevel (int)

理想情况下,我可以创建这样的类(假设我拥有所有 NHibernate 虚拟修饰符):

public enum Rights
{
    Read = 0,
    Save = 1,
    Delete = 2
}

public enum AccessLevels
{
    LevelOne = 0,
    LevelTwo = 1,
    LevelThree = 2
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Dictionary<Rights, AccessLevels> Privileges { get; set; }
}

最初我考虑使用 design described in this blog post,但我不想将 Rights 枚举设为一个类,因为我希望能够测试它而不必跟踪给定权限的 Id .我认为一对枚举是最简单的。

无论如何,我一直在努力弄清楚如何在 NHibernate 中实现这一点,更不用说 Fluent NHibernate。我希望一些 NH 大师可以提供帮助。

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    我不确定这是否可能......但尝试这样的事情(我没有测试):

     HasMany(x => x.Privileges)
                .WithTableName("Privileges")
                .KeyColumnNames.Add("Person_Id")
                .Cascade.All()
                .AsMap<string>(
                    index => index.WithColumn("Right").WithType<Rights>(),
                    element => element.WithColumn("AccessLevel").WithType<AccessLevels>()
                );
        }
    

    或者是这样的:

    References(x => x.Privileges).AsMap<Rights>("Right").Element("AccessLevel", c => c.Type<AccessLevels>());.
    

    看看这个帖子:How do I map a dictionary using Fluent NHibernate automapping?

    【讨论】:

    • 我会试一试并报告。
    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 2011-06-18
    • 2012-04-03
    • 1970-01-01
    • 2012-10-19
    • 2013-01-07
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多