【问题标题】:Create nonclustered primary keys using NHibernate and SchemaExport使用 NHibernate 和 SchemaExport 创建非聚集主键
【发布时间】:2011-03-28 07:38:18
【问题描述】:

我们通过 ActiveRecord 使用 SchemaExport。默认情况下它会生成一个这样的表:

create table List (
  Id      UNIQUEIDENTIFIER   not null,
  Name    NVARCHAR(255)   null,
  OwnerId UNIQUEIDENTIFIER   null,
    primary key ( Id ))

SQL Server 然后默认为主键添加聚集索引。但我希望这是非集群的。我想向 OwnerId 添加一个聚集索引,因为这样会更有效率。

现在,我可以在之后运行一个脚本来创建一个非聚集索引。这将涉及删除原始主键约束并添加非集群约束。但是,SchemaExport 已经帮助我创建了所有外键约束,这些约束阻止我删除主键。

所以我需要删除外键,这些外键的名称无用,例如 FK4BAD9607D2BEDDB5,然后重新创建它们(我可以自动再次执行此操作吗?)。有点头疼。

如果我能以某种方式进入那里并在生成主键时向主键添加一个非聚集规范,那会容易得多。是否有相关的导出工具我可以覆盖来执行此操作?

谢谢

【问题讨论】:

    标签: sql-server nhibernate sql-server-2008 schemaexport


    【解决方案1】:

    我相信您最好的选择是使用 SchemaExport 创建脚本,然后手动修改它。

    否则,您需要覆盖Dialect.GetAddPrimaryKeyConstraintString

    【讨论】:

    • 很遗憾,我无法手动修改。应用程序需要部署自己的架构,因此一切都需要自动化。
    • 感谢 Diego,这几乎是解决方案。我添加了一个自定义方言。唯一的问题是我必须使每个主键都是非聚集的,而不仅仅是在选定的表上,因为据我所知,方言中没有关于正在生成的表的上下文。
    • 为什么不让应用程序生成脚本,对其进行搜索和替换,然后执行它?
    • 最后,我还是坚持使用自定义方言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多