Интересно, поддерживает ли Entity Framework 5 уникальные ограничения на свойства объекта? Если да, то как я могу указать, что свойство должно быть уникальным?
Поддерживает ли Entity Framework 5 уникальные ограничения?
Ответ 1
Нет, это не так. В прошлом планировалось включить в EF 5.0 уникальную функцию ограничения:
http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx
Но вы можете видеть, что есть сообщение поверх сообщения:
Обновление: эта функция отложена и не будет включена в Entity Framework 5.
Вы можете проголосовать за функцию, чтобы повысить, возможно, приоритет, который он реализует с помощью...
... потому что, по-видимому, это даже не на дорожной карте для EF 6.0 на данный момент:
Ответ 2
Ну, я искал решение и, наконец, нашел его. при генерации миграции в коде вы можете создать уникальный ключ
CreateTable(
"dbo.TaBLE",
c => new
{
Id = c.Int(nullable: false, identity: true),
Date = c.DateTime(nullable: false),
Meter_Id = c.Int(),
})
.PrimaryKey(t => t.Id)
.Index(t => new {t.Meter_Id, t.Date}, true);
Валидация перед вставкой вы можете сделать на уровне BLL, поэтому я думаю, что она может решить вашу проблему.
Ответ 3
В то время как уникальные ограничения по-прежнему не поддерживаются EF (версия 6.0, начиная с написания этого), есть некоторые обходные пути для подхода Code First для получения желаемого поведения. См. решение на основе атрибутов в качестве ответа на аналогичный вопрос. Работает с EF 5.0 +.
EDIT:
Начиная с EF 6.1 поддерживаются уникальные индексы:
[Index(IsUnique = true)]
public string EmailAddress { get; set; }
Они являются такими же, как уникальные ограничения для большинства практических целей.
Ответ 4
Как уже упоминалось выше, он не поддерживается, но сейчас, когда я создаю базу данных программно (Code First), я использую следующий код в разделе init db:
MainDBContext mainDBContext = new MainDBContext();
mainDBContext.Database.ExecuteSqlCommand("ALTER TABLE table_name ADD CONSTRAINT uc_FieldName UNIQUE(FieldName)");
mainDBContext.Dispose();
Ответ 5
Я нашел обход, чтобы добиться уникальных ограничений на свойства сущностей. Это реально и интуитивно понятным. Пожалуйста, обратитесь к моему другому сообщению: