如何使用NHibernate映射特定行



我有以下情况:

// Model Attribute
int Id;
string Name;
int Classification;

// Model Role
int Id;
string Name;
List<Attribute> Attributes;

数据库如下:

tbl_Role
Id     Name
1      Admin
2      User

tbl_Attribute
Id     Name     Classification
1      Prename  1
2      Surname  2

tbl_Role_Attribute
RoleId ClassificationId
1      1
1      2
2      1

我如何在NHibernate中通过代码创建映射,以根据连接的分类获得角色的所有允许属性,并解析JSON的属性?模型到tbl_Role_Attribute的映射会是什么样子?类似于:

public PolicyMapping()
{
Table("tbl_Role_Attribute");
ManyToOne(a => a.Role, b =>
{
b.Column($"RoleId");
});
ManyToOne(a => a.Attribute, b =>
{
b.Column($"ClassificationId");
});
}

伪getRole((的预期JSON输出

[{Id: 1,
Name: Admin,
allowedAttributes: {
Id: 1
Name: Prename
Classification: 1},
{Id: 2
Name: Surname
Classification: 2}}]

如果你需要进一步的信息,请告诉我。提前谢谢。

编辑:

我的目标实际上是将角色映射到特定的分类(不是每个属性(,并获取该分类中的所有属性。(想象一个类似于某种"群体"的分类(。

您将映射RoleAttribute,然后在Role上有一个many-to-many。类似(假设Fluenthibernate(:

public class AttributeMap : ClassMap<Attribute>
{
public AttributeMap()
{
Id(a => a.Id);
Map(a => a.Name);
Map(a => a.Classification);
}
}
public class RoleMap : ClassMap<Role>
{
public RoleMap()
{
Id(r => r.Id);
Map(r => r.Name);
HasManyToMany(r => r.Attributes)
}
}

然后您可以创建这样的JSON结果:

var results = 
session
.Query<Role>()
.Fetch(r => r.Attributes)
.ToList();
var json = 
JsonConvert.SerializeObject(
results
.Select(r => 
new 
{
r.Id,
r.Name,
allowedAttributes = r.Attributes
});

最新更新