0

次のような単純な 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 クラス) 型です。

ということで・・・何故か混み合っています。

興味深いことに、poco クラス User の正確なコピーである MyUser クラスを作成すると、正常に動作し、ValidateMemberInitArgs(...) の両方の型が MyUser 型になります。

誰でも問題を再現し、解決策に光を当てることができますか?

ありがとう!

(プロジェクトのディスカッション リストの同じ質問へのリンク: http://code.msdn.microsoft.com/EFPocoAdapter/Thread/View.aspx?ThreadId=2138 )

4

2 に答える 2

0

問題は、クラス User がどのように解決されているかだと思います。

確認のために、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、

ダン

于 2009-08-12T08:17:29.660 に答える
0

なぜこれが起こっているのかがわかったと思います。

Msql ではテーブル名に大文字を使用できますが、MySql では使用できません。したがって、テーブル名に大文字を含む mssql エンティティ モデルから poco アダプターを作成し、それを使用して mysql データベースをクエリすると、このタイプのエラーが発生します。

これを修正するために、テーブルの名前をすべて小文字に変更しました。

于 2010-10-30T06:24:17.907 に答える