我的问题与的问题相同
然而,我真的看不到解决方案。假设我有一个简单的模型,有两个POCO,Country和State。
public class Country
{
public string Code { get; set; }
public string Name { get; set; }
}
public class State
{
public string Code { get; set; }
public string Name { get; set; }
public virtual Country Country { get; set; }
}
当我将存储库用于.GetStateByCode(myCode)时,它会检索一个动态代理对象。我想通过使用WCF服务将其发送到我的客户端。动态代理不是已知类型,因此它会失败。
以下是我的备选方案。我可以在上下文中将ProxyCreationEnabled设置为false,然后我的.GetStateByCode(myCode)会给我一个POCO,这很好。但是,POCO到Country的导航属性为NULL(不太好)。
我应该新建一个状态POCO并手动填充并从存储库返回的动态代理返回吗?我应该尝试使用AutoMapper将动态代理对象映射到POCO吗?这里有什么我完全错过的东西吗?
样品溶液
请参阅nuget包ValueInjecter(不是唯一可以做到这一点的工具……但非常易于使用)它允许轻松地将一个对象复制到另一个对象,尤其是具有相同属性和类型的对象。(记住延迟加载/导航的含义)。
所以香草选项是:
var PocoObject = new Poco();
PocoObject.InjectFrom(DynamicProxy); // copy contents of DynamicProxy to PocoObject
但检查默认行为并考虑自定义规则
var PocoObject = new Poco();
PocoObject.InjectFrom<CopyRule>(DynamicProxy);
public class CopyRule : ConventionInjection
{
protected override bool Match(ConventionInfo c)
{
bool usePropertry; // return if the property it be included in inject process
usePropertry = c.SourceProp.Name == "Id"; // just an example
//or
// usePropertry = c.SourceProp.Type... == "???"
return usePropertry;
}
}