isu*_*anu 6 nhibernate orm fluent-nhibernate
我有两个多对多关系的实体.
public class SecurityGroupMappingOverride : IAutoMappingOverride<SecurityGroup>
{
public void Override(AutoMapping<SecurityGroup> mapping)
{
mapping.HasManyToMany(x => x.Actions).ParentKeyColumn("securityGroupId").ChildKeyColumn("actionId").
LazyLoad().Table("ActionGroups");
mapping.HasManyToMany(x => x.Members).ParentKeyColumn("securityGroupId").ChildKeyColumn("userId").
LazyLoad().Inverse().Table("UserGroups");
mapping.Map(x => x.Name).Length(64);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想在表UserGroups的两列(userId,securityGroupId)上创建聚簇索引.
或者只是在两个列上的UserGroups上创建主键,因为同时不能是两个相同的链接.
谢谢
我假设您希望 NHibernate 的SchemaExport
工具为您生成这些索引/键。
对于多对多包(FluentNHibernate 的默认集合类型),SchemaExport 生成:
create UserGroups (
securityGroupId INT not null,
userId INT not null,
)
Run Code Online (Sandbox Code Playgroud)
对于多对多集合,它生成:
create UserGroups (
securityGroupId INT not null,
userId INT not null,
primary key (securityGroupId, userId)
)
Run Code Online (Sandbox Code Playgroud)
...所以只需添加.AsSet()
到您的映射中即可。
mapping.HasManyToMany(x => x.Members)
.AsSet()
// ... etc.
Run Code Online (Sandbox Code Playgroud)
如果您考虑一下手袋和套装是什么,这确实是有道理的。套装中的元素应该是唯一的,而包则没有唯一性要求。