Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Нет поддержки "server-generated keys or values"


Автор: Raistlin 9.8.2009, 13:45
Доброго времени суток.
Работаю с Entity Framework и SQL Server Compact Edition 3.5.
Обнаружил очень досадное ограничение:
Цитата
SQL Server Compact does not support entities with server-generated keys or values when it is used with the Entity Framework, although the Entity Framework allows you to define entity types with server-generated keys or values. Data manipulation operation on an entity that has server-generated values throws a "Not supported" exception.

В том числе, нельзя использовать автоинкрементацию первичного ключа на стороне БД, при вставке новой записи.

Набросал вот такой костыль:
Код
    public static class MyEntityIdManager
    {
        static MyEntityIdManager()
        {
            using (MyEntities context
                = new MyEntities())
            {
                ObjectQuery<MyEntity> query = context.MyEntity;

                if (query.Count() > 0)
                {
                    MyEntity lastEntity = context.MyEntity.ToList().Last<MyEntity>();

                    IdManager.Id = lastEntity.EntityID + 1;
                }
                else
                    IdManager.Id = 0;
            }
        }

        private static int _id;

        public static int Id
        {
            get 
            {
                ++_id;

                return IdManager._id; 
            }
            set { IdManager._id = value; }
        }
    }

Далее к MyEntity добавляется новый конструктор, не принимающий Id в параметрах, идентификатор задается в теле конструктора.
Хранение и автоинкрементация Id на стороне приложения даст возможность добавить несколько объектов, не вызывая каждый раз SaveChanges().

В связи с вышеперечисленным вопрос: Есть ли более красивое решение, как генерировать Id на стороне приложения с учетом специфики EF?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)