1

複数の null 値を許可するモデルに一意のプロパティを設定することは可能ですか? 実装は SQL Server を使用しており、これが可能であるように思われます:重複する NULL を使用した SQL Server UNIQUE 制約

CFE で一意の制約の動作を変更する方法はありますか?

ご回答有難うございます、

4

1 に答える 1

1

SQL Server プロデューサーは、この特定の SQL ステートメントを生成できません。ただし、生成されたインデックスをフィルター選択されたインデックスに置き換えることができます。

1 つまたは 2 つのインデックスを変更する必要がある場合は、という名前の SQL スクリプトを作成できますafter_<default namespace>_tables.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
[%}%] 
[%}%]
[%}%]
于 2016-04-20T12:28:46.957 に答える