我正在将一个巨大的 Web 应用程序从 SQL Server 迁移到 MySql。该应用程序使用 Linq,所以我使用的是 DBLinq。目前大多数事情都正常工作,除了在几页上我得到一个奇怪的错误。一切都是从这个开始的:
Property 'Int32 ForumID' is not defined for type 'DbLinq.Data.Linq.Table`1[CPost]'
我显然在 CPost 类中有一个 ForumID,所以这不是问题。我尝试将查询复制到一个单独的文件并开始删除其中的一部分以查看导致错误的原因。过了一会儿,我发现这条线:
var q = from u in db.Users select new {ab = u};
引发异常:
New
在线:
throw new ArgumentException(operationType.ToString());
源文件:D:\Visual Studio 2008\Projects\DbLinq\src\DbLinq\Data\Linq\Sugar\Implementation\ExpressionDispatcher.Analyzer.cs 行:858
但是这段代码:
var q = from u in db.Users select u;
跑得完美。
如果需要,我可以提供更多信息,但是我不能发布整个源代码,因为它非常庞大(超过 10,000 行,不包括 html)。有没有人遇到过类似的问题?
编辑:经过进一步调查,我发现 DbLinq 抱怨,因为它没有从查询中找到关键字 New 或 MemberInit
var q = db.Posts.Select(post => post);
工作时:
var q = db.Posts.Select(o => new SPost {Post = o});
和
var q = db.Users.Select(u => new {user = u});
引发异常。异常发生在 trunk/src/DbLinq/Vendor/Implementation/SqlProvider.cs 的第 285行