Поскольку SQL Azure требует кластеризованных индексов для каждой таблицы для репликации (см. Здесь http://blogs.msdn.com/b/sqlazure/archive/2010/05/12/10011257.aspx) Я добавил в свой MsSqlConfiguration следующий MsSqlAzureDialect:
public class MsSqlAzureDialect : MsSql2008Dialect
{
public override string PrimaryKeyString
{
get { return "primary key CLUSTERED"; }
}
}
Однако это не решает проблему, с которой я сейчас сталкиваюсь с таблицей "многие ко многим". В настоящее время у меня есть ситуация, когда у меня есть пользователь с ролями и ролью с пользователями. Таким образом, существует связь «многие ко многим» между пользователями и ролями и таблица ссылок, созданная 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 в плавную конфигурацию. Однако это не сработало из-за ошибки, в которой говорилось: «По соображениям безопасности DTD запрещен в этом XML-документе ...»
Примечание. Я использую NHibernate для создания базы данных в первую очередь кода. Итак, я фактически использую свои сущности и AutomappingOverrides для создания схемы базы данных при развертывании.
Любая помощь приветствуется.