给定一个简单的 POCO 类,例如:
public class User { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } }
当我尝试使用投影到自身的查询时,如下所示:
using (var context = new Context())
{
var user = context.User.Select(u => new User { Id = u.Id }).FirstOrDefault();
}
...我得到:
未处理的异常:System.ArgumentException:“Id”不是“ORMTest1Model.Users”类型的成员
...这来自 System.Linq.Expressions.Expression 的方法 ValidateMemberInitArgs(...) (使用反射器)。
在此方法中,binding.Member.DeclaringType 的类型是 PocoAdapters.UserAdapter 类型(生成的),变量“type”的类型是 User 类型(POCO 类)。
所以......出于某种原因,它把事情搞混了。
有趣的是,如果我创建一个 MyUser 类,它是 poco 类 User 的精确副本,它可以正常工作,并且 ValidateMemberInitArgs(...) 中的两种类型都是 MyUser 类型。
任何人都可以重现该问题并阐明解决方案吗?
谢谢!
(链接到项目讨论列表中的相同问题:http ://code.msdn.microsoft.com/EFPocoAdapter/Thread/View.aspx?ThreadId=2138 )