我試圖強制執行一個列的唯一約束,首先使用流利配置的代碼。有什麼比在業務邏輯實現它,或者使用喜歡的東西下面EF代碼第一流暢的API定義了唯一的約束
context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT...");
或者我在想,如果這是不可能實現使用流利的配置獨特的約束更好的辦法?
編輯:
它確認這是不可能用流利的配置。但是,我又想知道做這件事的最好方法是什麼?並想知道EF不支持這一點的原因。
我試圖強制執行一個列的唯一約束,首先使用流利配置的代碼。有什麼比在業務邏輯實現它,或者使用喜歡的東西下面EF代碼第一流暢的API定義了唯一的約束
context.ObjectContext.ExecuteStoreCommand("CREATE UNIQUE CONSTRAINT...");
或者我在想,如果這是不可能實現使用流利的配置獨特的約束更好的辦法?
編輯:
它確認這是不可能用流利的配置。但是,我又想知道做這件事的最好方法是什麼?並想知道EF不支持這一點的原因。
我
該問題以前出現用流利的API無法實現獨特的約束。
所以,你所用的方法是正確的!
感謝您的回覆。但是如果我使用命令執行它,它將取決於我的數據庫實現。這是我不想要的。 – Geethanga 2013-03-19 14:03:17
在本例中,您可以看到如何定義唯一鍵屬性並將其用於任何實體。
http://code.msdn.microsoft.com/windowsdesktop/CSASPNETUniqueConstraintInE-d357224a
感謝您的回覆伊姆蘭。其實這是一個很好的方法來做到這一點。但最終它執行的是供應商特定的SQL語句,所以如果我將數據庫更改爲不同的供應商,我將最終修改代碼。但我同意我只能修改一個地方。 – Geethanga 2013-07-13 05:42:18
這是可能的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);
}
}
2列如何共同形成一個獨特的關鍵? – 2015-08-19 08:51:41
該團隊正在考慮:http://entityframework.codeplex.com/workitem/299 – ErikEJ 2013-03-19 17:59:59