Почему Entity Framework делает определенные поля EnityKeys, когда они не являются даже PK в исходной БД?

Начиная с проекта Entity Framework.

Импортировал базу данных, которую я собираюсь использовать, и сразу заметил, что многие поля таблицы были преобразованы в типы EntityKey, а исходные поля даже не являются ключами. Похоже, это не образец того, какие поля были сделаны EntityKeys, а какие нет.

Это нормально? Там не было никаких вариантов для этого в мастере. Я не хочу проходить и удалять это свойство для всех полей, где оно было добавлено.

Спасибо за совет!

2 ответа

Каждой сущности в вашей модели требуется уникальный ключ, поэтому EF может отслеживать и извлекать / сохранять эти сущности на основе их уникального идентификатора.

Если ваши таблицы в вашей базе данных не имеют первичных ключей, то ваша база данных не является реляционной и поэтому не должна использоваться ORM, такой как EF, которая преимущественно предназначена для СУБД.

Если у вас была такая сущность:

public class Orders
{
   public string Name { get; set; }
   public double Price { get; set; }
}

Как бы вы получили один заказ? Как бы вы сохранили один заказ?

Решающие методы LINQ, такие как SingleOrDefault() было бы бесполезно, так как нет гарантии, что это не приведет к исключению:

var singleOrder = ctx.Orders.SingleOrDefault(x => x.Name == "Foo");

Хотя у вас есть EntityKey и PK с именем "OrderId", это гарантированно не вызовет исключения:

var singleOrder = ctx.Orders.SingleOrDefault(x => x.OrderId == 1);

http://msdn.microsoft.com/en-us/library/dd283139.aspx

Я думаю, что как только вы прочитаете первый абзац, вы поймете роль ключей сущностей в Entity Framework.

Другие вопросы по тегам