我第一次尝试使用 EFPocoAdapter 进行 EF。我有一个相对简单的 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);
}
}
I get an error in the PocoAdapter class, claiming that PocoEntity is null is the following method inside my base class's adapter:
public override void PopulatePocoEntity(bool enableProxies)
{
base.PopulatePocoEntity(enableProxies);
PocoEntity.Owner = _Owner.CreatePocoStructure();
if (!(PocoEntity is IEntityProxy))
{
}
}
任何人的任何想法?
所以,经过一点调试,我认为这与代理有关。在 PocoAdapterBase 内部,我们有以下方法:
protected PocoAdapterBase(TPocoClass pocoObject)
{
_context = ThreadLocalContext.Current;
bool allowProxies = false;
if (_context != null)
{
allowProxies = _context.EnableChangeTrackingUsingProxies;
}
_pocoEntity = pocoObject ?? (TPocoClass)(allowProxies ? CreatePocoEntityProxy() : CreatePocoEntity());
Init();
InitCollections(allowProxies);
RegisterAdapterInContext();
}
设置 _pocoEntity 的行调用 CreatePocoEntityProxy,它返回 null。
我找到的更多信息。