我试图首先使用流利的代码配置来强制执行列的唯一约束。有没有比在业务逻辑中实现它或使用类似下面的方法更好的方法
context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT...");
或者我想知道是否不可能使用流畅的配置来实现独特的约束?
编辑 :
已确认这对于流畅的配置是不可能的。但话又说回来,我想知道最好的方法是什么?并且想知道 EF 不支持这一点的原因。
我试图首先使用流利的代码配置来强制执行列的唯一约束。有没有比在业务逻辑中实现它或使用类似下面的方法更好的方法
context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT...");
或者我想知道是否不可能使用流畅的配置来实现独特的约束?
编辑 :
已确认这对于流畅的配置是不可能的。但话又说回来,我想知道最好的方法是什么?并且想知道 EF 不支持这一点的原因。
在此示例中,您可以看到如何定义唯一键属性并在任何实体中使用它。
http://code.msdn.microsoft.com/windowsdesktop/CSASPNETUniqueConstraintInE-d357224a
我之前也出现过这个问题
它无法使用 fluent API 实现唯一约束。</p>
所以,你使用的方式是正确的!
这可以通过 DbMigrations...
public override void Up()
{
CreateIndex("dbo.MyTableName", "MyColumnName", unique: true);
}
可以使用自定义扩展方法来完成:
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Infrastructure.Annotations;
using System.Data.Entity.ModelConfiguration.Configuration;
internal static class TypeConfigurationExtensions
{
public static PrimitivePropertyConfiguration HasUniqueIndexAnnotation(
this PrimitivePropertyConfiguration property,
string indexName,
int columnOrder = 0)
{
var indexAttribute = new IndexAttribute(indexName, columnOrder) { IsUnique = true };
var indexAnnotation = new IndexAnnotation(indexAttribute);
return property.HasColumnAnnotation("Index", indexAnnotation);
}
}