Подтвердить что ты не робот

Поддерживает ли Entity Framework 5 уникальные ограничения?

Интересно, поддерживает ли Entity Framework 5 уникальные ограничения на свойства объекта? Если да, то как я могу указать, что свойство должно быть уникальным?

4b9b3361

Ответ 1

Нет, это не так. В прошлом планировалось включить в EF 5.0 уникальную функцию ограничения:

http://blogs.msdn.com/b/efdesign/archive/2011/03/09/unique-constraints-in-the-entity-framework.aspx

Но вы можете видеть, что есть сообщение поверх сообщения:

Обновление: эта функция отложена и не будет включена в Entity Framework 5.

Вы можете проголосовать за функцию, чтобы повысить, возможно, приоритет, который он реализует с помощью...

http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050579-unique-constraint-i-e-candidate-key-support

... потому что, по-видимому, это даже не на дорожной карте для EF 6.0 на данный момент:

http://entityframework.codeplex.com/wikipage?title=Roadmap

Ответ 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

Я нашел обход, чтобы добиться уникальных ограничений на свойства сущностей. Это реально и интуитивно понятным. Пожалуйста, обратитесь к моему другому сообщению:

fooobar.com/info/48331/...