我正在试图找出完成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大师可以提供帮助。
答案 0 :(得分:0)
我不确定是否可能......但尝试这样的事情(我没有测试):
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?