Почему 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.