Я пробую EF с EFPocoAdapter в первый раз. У меня есть относительно простой сценарий TPH с одной таблицей и двумя типами, каждый из которых наследуется от абстрактного базового класса.
Моя модель проверяется через EdmGen, и мои файлы PocoAdapter.cs и xxxEntities.cs также генерируют нормально. (ну, на самом деле, есть некоторые пробемы пространства имен, которые я сейчас настраиваю вручную, пока мы не выясним, куда идти дальше.)
Когда я запускаю простой тест для извлечения данных:
using (CINFulfillmentEntities context = new CINFulfillmentEntities())
{
// use context
var alerts = from p in context.Notifications.OfType<Alert>()
select p;
foreach (var alert in alerts)
{
Assert.IsNotNull(alert);
}
}
Я получаю сообщение об ошибке в классе PocoAdapter, утверждая, что PocoEntity имеет значение null, это следующий метод внутри адаптера моего базового класса:
public override void PopulatePocoEntity(bool enableProxies)
{
base.PopulatePocoEntity(enableProxies);
PocoEntity.Owner = _Owner.CreatePocoStructure();
if (!(PocoEntity is IEntityProxy))
{
}
Есть идеи у кого-нибудь?
}
Итак, после небольшой отладки, я думаю, что это связано с прокси. Внутри PocoAdapterBase у нас есть следующий метод:
защищенный PocoAdapterBase (TPocoClass pocoObject)
{
_context = ThreadLocalContext.Current;
bool allowProxies = false;
if (_context! = null)
{
allowProxies = _context.EnableChangeTrackingUsingProxies;
}
_pocoEntity = pocoObject ?? (TPocoClass) (allowProxies? CreatePocoEntityProxy (): CreatePocoEntity ());
В этом();
InitCollections (allowProxies);
RegisterAdapterInContext ();
}
Строка, которая устанавливает _pocoEntity, вызывает CreatePocoEntityProxy, который возвращает ноль.
Больше информации, как я нахожу ...