Entity Framework 4 + Само отслеживаемые объекты + Динамические данные ASP.NET = Ошибка - PullRequest
1 голос
/ 17 февраля 2010

Я использую опцию кодирования Self-Tracking Entities в EF4 (VS2010 RC) и пытаюсь использовать Dynamic Data для создания быстрого и грязного веб-сайта для редактирования. Файлы Entity, Data Context и EDMX находятся в отдельных сборках, и эта модель хорошо работает, когда я вызываю все в коде. Но когда я пытаюсь использовать его с динамическими данными, сразу же получаю полную ошибку:

Не удалось найти тип CLR для «Core.Recording». в System.Data.Metadata.Edm.MetadataWorkspace.GetObjectSpaceType (StructuralType edmSpaceType) в System.Web.DynamicData.ModelProviders.EFDataModelProvider.GetClrType (EntityType entityType) в System.Web.DynamicData.ModelProviders.EFDataModelProvider.CreateTableProvider (EntitySet entitySet, EntityType entityType) в System.Web.DynamicData.ModelProviders.EFDataModelProvider..ctor (Object contextInstance, Func 1 contextFactory) at System.Web.DynamicData.ModelProviders.SchemaCreator.CreateDataModel(Object contextInstance, Func 1 contextFactory) в System.Web.DynamicData.MetaModel.RegisterContext (Func`1 contextFactory, конфигурация ContextConfiguration) в SimpleAdmin.Global.RegisterRoutes (маршруты RouteCollection) в D: \ SimpleAdmin \ Global.asax.cs: строка 32 в SimpleAdmin.Global.Application_Start (Отправитель объекта, EventArgs e) в D: \ SimpleAdmin \ Global.asax.cs: строка 61

RegisterRoutes выглядит так:

DefaultModel.RegisterContext((() =>  new DataContext.Entities()), new ContextConfiguration() { ScaffoldAllTables = true });

Конструктор по умолчанию в контексте был изменен для использования строки my my connection, которая выглядит следующим образом:

<add name="Entities" connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxxxxxxxxx;Initial Catalog=MyDB;Persist Security Info=True;User ID=xxxx;Password=xxxxxxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/> 

Я предполагаю, что не правильно ссылаюсь на пробелы O, C или CS в строке соединения ... все же это прекрасно работает, если я вызываю контекст в коде и использую его. Так что я делаю не так?

Спасибо!

Ответы [ 3 ]

1 голос
/ 17 февраля 2010

На самом деле я нашел работоспособное решение.Это вытекает из этого поста: http://thedatafarm.com/blog/data-access/wcf-data-services-and-ef-pocos-that-are-in-their-own-assembly/

Поскольку я использую сайт динамических данных только для быстрого и грязного администрирования, а не как производственный сайт, ориентированный на клиента, меня не беспокоитПерфом вопросы введены в сценарий.Поэтому я добавил конструктор, который будет использовать только DynamicData:

public Entities(bool dynamicData)
    : base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString, ContainerName)
{
    Initialize();
    var tracestring = this.CreateQuery<Address>("Entities.Addresses").ToTraceString(); 
}

, затем в функции RegisterRoutes в Global.asax.cs у меня теперь есть следующее:

DefaultModel.RegisterContext((() =>  new DataContext.Entities(true)), new ContextConfiguration() { ScaffoldAllTables = true });

Работает как указано.Вроде раздражает.но на каждой платформе должны быть моды, которые не очень хорошо играют вместе, верно?

HTH.

1 голос
/ 17 февраля 2010

Вам нужно добавить ссылку на сборку, содержащую ваши сущности, в ваше веб-приложение.

0 голосов
/ 24 июля 2013

Если вам известна сборка, которая содержит классы POCO и имеет ObjectContext, вы можете использовать следующую информацию для загрузки информации в метаданные, чтобы избежать ошибки:

objectContext.MetadataWorkspace.LoadFromAssembly(assemblyWithPocos);
...