1

Проект библиотеки классов ссылается на сборку Entity Framework 5. Тип .NET для «доступных точек» в приведенном ниже коде - Decimal. Я пытаюсь использовать конфигурации API CodeFirst Fluent для сопоставления этого свойства с десятичным типом (9,4) данных на SQL Server, чтобы записи данных не усекались в 2 десятичных разряда, что является сопоставлением по умолчанию.Странная ошибка компилятора для преобразования десятичного типа EF5

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<EventGroup>().Property(g => g.AvailablePoints).HasPrecision(9,4); 
    base.OnModelCreating(modelBuilder); 
} 

Я получаю следующее сообщение об ошибке компилятора:

"The type 'System.Data.Spatial.DbGeography' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

Если удалить .Property(g => g.AvailablePoints).HasPrecision(9,4); с первого оператора в методе, он отлично компилируется. Ни одна из документации EF5 или сообщений в форуме не касается этой ошибки компилятора или объясняет, как эта конфигурация Fluent API связана с типом System.Data.Spatial.DbGeography.

+0

Вы уверены, что у вас есть dll Entity Framework в вашем проекте? Можете ли вы опубликовать свой проприетар? Вы выполнили настройку API FLuent в том же классе модели? – MayogaX

+0

EntityFramework немного запутанно: 1. В System.Data.Entity (часть .net 4 и 4.5) есть ядро ​​EntityFramework. 2. Есть первый код в сборке EntiyFramework.dll. Эта сборка зависит от EntityFramework.dll. Например, есть класс DbContext. – yonexbat

+0

Ничего себе, это сбивает с толку. Вся документация, книги и учебные видеоролики, которые я прочитал, звучат так, как будто все, что вам нужно, поставляется вместе с пакетом NuGet EF. Очевидно нет. Спасибо за информацию. – MikeyWazz

ответ

0

Это связано с тем, что ваш проект не ссылается на необходимую сборку.

В обозревателе решений найдите папку «Ссылки» в своем проекте.
Щелкните правой кнопкой мыши эту папку и нажмите «Добавить ссылку».
На вкладке «.NET» вы можете найти запись «System.Data.Entity» с версией 4.0.0.0. При добавлении этого вопроса следует устранить эту проблему.

+0

В этом случае он может использовать диспетчер регистрации, потому что данные географии Sql Server, запущенные в EF 5. PM, лучше, потому что тоже принимают версию – MayogaX

+0

Код, скомпилированный, когда я добавил System.Data.Entity v4.0.0. 0, как было предложено выше. Я предполагаю, что это привело к части System.Data.Entity, которая не включена в EntityFramework.dll. @MayogaX - Как бы я сделал то же самое через диспетчер пакетов? Я уже использовал диспетчер пакетов для получения пакета EF5, но этого было недостаточно для решения проблемы. – MikeyWazz

+0

Рад, что нашел это. Это исправило меня тоже. Теперь, зачем нам нужна «старая» сборка? –

Смежные вопросы