是否有可能與動態代理處理拉出底層POCO當我們需要它們序列化時?
理由:
我有一個要求序列化(XML)我的POCO實體使用EF代碼第一次,但很快發現,DbContext
爲我的POCO創建動態代理,這使得它很難序列化。
我曾嘗試以下:
- 禁用代理創建在
DbContext
,只用純POCO工作。這允許我以任何我喜歡的方式序列化實例。唯一的問題是沒有跟蹤導航屬性,因此,我必須手動添加所有相關實體,否則將始終創建新實體(請參閱代碼示例)。 - 在POCO上執行
ISerializable
接口來手動處理序列化。這是很多工作,並不是一個可持續的解決方案。
代碼示例。
// Attach and update tags
foreach (var tag in entity.Tags)
{
Context.Entry(tag).State = Context.Tags.Any(t => t.ID == tag.ID)
? EntityState.Modified
: EntityState.Added;
}
// Attach and update state.
Context.Entry(entity).State = Context.Resources.Any(x => x.ID == entity.ID)
? EntityState.Modified
: EntityState.Added;
正如你可以想像,複雜性可能失控的時候,我的實體有更多的關係。