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

标签 c# azure fluent-nhibernate nhibernate-mapping azure-sql-database

由于 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/

相关文章:

使用 Fluent NHibernate 设置类映射

c# - 新的 is 模式匹配语法可以与现有变量一起使用吗?

c# - .NET Core Web Deploy to production 在发布时关闭站点?

c# - 来自代码的 Windows Azure 服务状态

azure - 在AzureDataFactory中,无法将容器中的.wav文件集合配置为 'Dataset'

Azure Kubernetes 服务 - 持久卷/持久卷声明更改权限

nhibernate - Nhibernate : System. Data.SqlClient.SqlException 错误: 'Index' 附近的语法不正确

nhibernate - 如何将新对象添加到与 NHibernate 一对多映射的 IList?

c# - EF-1 :1 relation not on primary key

c# - 帮助在提供商场景中选择我的 DDD 聚合根?