唯一约束允许空值。
唯一约束允许空值。
在模型中是否可能拥有一个允许多个空值的唯一属性?
实施方案是使用SQL Server,看起来这是可能的:SQL Server UNIQUE约束条件允许重复的NULL值
是否有办法修改CFE中唯一约束的行为?
谢谢您的回答。
唯一约束允许为空值的问题出现的原因是SQL Server生产者无法生成特定的SQL语句。然而,您可以通过一个过滤索引来替换生成的索引。
如果您需要更改一个或两个索引,您可以创建一个名为after_<default namespace>_tables.sql
的SQL脚本。此脚本将由SQL生产者自动执行。
-- TODO Drop unique index if exists CREATE UNIQUE INDEX [IX_Cus_Cuo_Cus] ON [dbo].[Customer]([Customer_FullName]) WHERE [Customer_FullName] IS NOT NULL
如果您需要更改很多索引,您可以编写一个模板并使用SQL Server模板生产者。
[%@ namespace name="CodeFluent.Model"%] [%@ namespace name="CodeFluent.Model.Persistence"%] /* [%=Producer.GetSignature()%] */ [%foreach(Table table in Producer.Project.Database.Tables) { if (table.Constraints.Count == 0) continue;%] [%foreach(CodeFluent.Model.Persistence.Constraint constraint in table.Constraints) { if (constraint.ConstraintType != ConstraintType.Unique) continue; %] -- TODO Drop unique index if exists CREATE UNIQUE INDEX [[%=constraint.ShortName%]] ON [[%=CodeFluent.Producers.SqlServer.SqlServerProducer.GetOwner(table)%]].[%=table.FullName%] ( [%for(int i = 0; i < constraint.Columns.Count; i++) {%] [%if(i != 0){%], [%}%][[%=constraint.Columns[i].Name%]] [%}%] ) WHERE [%for(int i = 0; i < constraint.Columns.Count; i++) {%] [%if(i != 0){%]AND [%}%][[%=constraint.Columns[i].Name%]] IS NOT NULL [%}%] [%}%] [%}%]