给出一个简单的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(...)(使用Reflector)。
在此方法中,binding.Member.DeclaringType的类型为PocoAdapters.UserAdapter类型(生成的类型),变量“type”的类型为User类型(POCO类)。
所以...出于某种原因,它正在混合起来。
有趣的是,如果我创建一个类MyUser,它是poco类User的精确副本,它可以正常工作,并且ValidateMemberInitArgs(...)中的两个类型都是MyUser类型。
任何人都可以重现这个问题并阐明解决方案吗?
谢谢!
(链接到项目讨论列表中的同一问题:http://code.msdn.microsoft.com/EFPocoAdapter/Thread/View.aspx?ThreadId=2138)
答案 0 :(得分:0)
我认为问题在于如何解决用户类的问题。
要确认,您能否将POCO类重构为PocoUser。是否会发生同样的错误?
var user = context.User.Select(u => new User { Id = u.Id }).FirstOrDefault();
会变成
var user = context.User.Select(u => new PocoUser { Id = u.Id }).FirstOrDefault();
HTH,
丹
答案 1 :(得分:0)
我想我弄清楚为什么会这样。
MsSql允许表名中的大写字母,但MySql不允许。 因此,如果您从包含表名中的大写字母的mssql实体模型创建poco适配器,并使用它来查询mysql数据库,则会出现此类错误。
为了解决这个问题,我只是将我的表重命名为全小写。