gpt4 book ai didi

c# - 与 SQL Azure 的多对多流畅 NHibernate 映射

转载 作者:行者123 更新时间:2023-12-03 01:12:26 24 4
gpt4 key购买 nike

由于 SQL Azure 需要每个表的聚集索引进行复制(请参见此处 http://blogs.msdn.com/b/sqlazure/archive/2010/05/12/10011257.aspx ),我已将以下 MsSqlAzureDialect 添加到我的 MsSqlConfiguration 中:

public class MsSqlAzureDialect : MsSql2008Dialect
{
public override string PrimaryKeyString
{
get { return "primary key CLUSTERED"; }
}
}

但是,这并不能解决我目前在多对多表方面遇到的问题。我目前遇到的情况是,我有一个具有角色的用户,一个具有用户的角色。所以Users和Roles之间存在多对多的关系以及NHibernate生成的链接表。所以在我的 UserAutomappingOverride 中我有这样的东西:

public class UserAutomappingOverride : IAutoMappingOverride<User>
{
public void Override(AutoMapping<User> mapping)
{
mapping.HasManyToMany(x => x.Roles).Cascade.SaveUpdate();
}
}

这会导致 NHibernate 创建一个名为 RoleToUser 的链接表。但是,该表没有 PK,因此没有聚集索引。这是在 SQL Azure 中使用的无效表配置。

我尝试使用不流畅的 NHibernate 中的数据库对象,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<nhibernate-mapping>
<database-object>
<create>create clustered index ix on RoleToUser(User_id, Role_id)</create>
<drop>drop index RoleToUser.ix</drop>
</database-object>
</nhibernate-mapping>

但是,尝试将不流畅的 NHibernate 代码组合到流畅的配置中是一次盲目尝试。但它不起作用,因为出现错误“出于安全原因,此 XML 文档中禁止使用 DTD...”

注意:我使用 Fluent NHibernate 进行代码优先数据库创建。因此,我实际上使用我的实体和 AutomappingOverrides 在部署时生成数据库的架构。

任何帮助将不胜感激。

最佳答案

我有一个类似的结构,可以在 Azure 中运行

CREATE TABLE [dbo].[ClientLabel](
[ClientId] [bigint] NOT NULL,
[LabelId] [bigint] NOT NULL,
CONSTRAINT [PK_ClientLabel] PRIMARY KEY CLUSTERED
(
[ClientId] ASC,
[LabelId] ASC
) WITH (..) ON [PRIMARY]
) ON [PRIMARY]

关于c# - 与 SQL Azure 的多对多流畅 NHibernate 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com