Лучший отвечающий
Первичный ключ типа GUID и EntityFramework

Вопрос
-
Добрый день, друзья!
Возник такой вопрос. Есть таблица в базе данных SQL Server. В таблице есть поле Id , которое является первичным ключом и имеет тип uniqueidentifer, то есть guid.
Если генерировать guid на клиенте в C# коде и записывать его с помощью EntityFramework в БД, то нельзя гарантировать хоть какую то уникальность. А если использовать функцию newid() в самой СУБД для авто-генерации ключа, то нужно как то настроить EntityFramework чтобы не передавать guid. Но как настроить без ручной правки всех таблиц непонятно.
Наверняка есть какое-нибудь тривиальное решение вопроса...
- Изменено Воробьев Валерий 8 апреля 2012 г. 11:54
8 апреля 2012 г. 11:52
Ответы
-
Проблема решена!
Подробности здесь: http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/ (Хотя уже вышел updete исправляющий баг)
- Предложено в качестве ответа YatajgaModerator 8 апреля 2012 г. 12:51
- Помечено в качестве ответа Abolmasov Dmitry 9 апреля 2012 г. 4:52
8 апреля 2012 г. 12:45
Все ответы
-
Проблема решена!
Подробности здесь: http://leedumond.com/blog/using-a-guid-as-an-entitykey-in-entity-framework-4/ (Хотя уже вышел updete исправляющий баг)
- Предложено в качестве ответа YatajgaModerator 8 апреля 2012 г. 12:51
- Помечено в качестве ответа Abolmasov Dmitry 9 апреля 2012 г. 4:52
8 апреля 2012 г. 12:45 -
Спасибо, что выложили решение проблемы. Оно будет полезно другим пользователям, столкнувшимся с подобным.
Для связи [mail]
9 апреля 2012 г. 4:52 -
Есть таблица в базе данных SQL Server.
В таблице есть поле Id , которое является первичным ключом и имеет тип uniqueidentifer, то есть guid.
использовать функцию newid()
Очень плохая практика использовать гуид в качестве ПК (по умолчанию кластерный индекс) и уж тем более генерация значений с помощью newid().
1. Вы для идентификатора выделяете 16 байт...на сколько это оправдано!?
2. И самое печально получаете бешенную фрагментацию и падение производительности
http://www.t-sql.ru
14 апреля 2012 г. 5:20Модератор