Linq から SQL への関連する質問が 2 つあります。私のモデルがどのように見えるかを確認するには、下の画像を参照してください。
質問1
クラス/テーブルUser.AddedByUser
にフィールドを熱心にロードする方法を理解しようとしています。User
このフィールドは、User.AddedByUserId
フィールドの関係から生成されます。テーブルは自己参照型であり、Linq to SQL でUser.AddedByUser
プロパティを熱心にロードする方法を見つけようとしています。つまり、User
エンティティがロード/フェッチされるたびに、User.AddedByUser と User.ChangedByUser もフェッチする必要があります。ただし、これが再帰的な問題になる可能性があることは理解しています...
アップデート 1.1:
次のように DataLoadOptions を使用しようとしました。
var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);
db = new ModelDataContext(connectionString);
db.LoadOptions = options;
しかし、これは機能しません.2行目で次の例外が発生します:
System.InvalidOperationException occurred
Message="Cycles not allowed in LoadOptions LoadWith type graph."
Source="System.Data.Linq"
StackTrace:
at System.Data.Linq.DataLoadOptions.ValidateTypeGraphAcyclic()
at System.Data.Linq.DataLoadOptions.Preload(MemberInfo association)
at System.Data.Linq.DataLoadOptions.LoadWith[T](Expression`1 expression)
at i3t.KpCosting.Service.Library.Repositories.UserRepository..ctor(String connectionString) in C:\Development\KP Costing\Trunk\Code\i3t.KpCosting.Service.Library\Repositories\UserRepository.cs:line 15
InnerException:
例外は一目瞭然です。オブジェクト グラフは Cyclic であってはなりません。また、行 2 が例外をスローしなかったと仮定すると、重複キーであるため、行 3 は例外をスローしたと確信しています。
更新 1.2 :
以下も機能しません (上記のUpdate 1.1と組み合わせて使用されていません):
var query = from u in db.Users
select new User()
{
Id = u.Id,
// other fields removed for brevityy
AddedByUser = u.AddedByUser,
ChangedByUser = u.ChangedByUser,
};
return query.ToList();
次の自明の例外がスローされます。
System.NotSupportedException occurred
Message="Explicit construction of entity type 'i3t.KpCosting.Shared.Model.User' in query is not allowed."
私は今、これを解決する方法について本当に途方に暮れています。助けてください!
質問2
Entity.ChangedByUser
私のDBの他のすべてのテーブル、したがってLinq to SQLモデルには、 (外部キー/関係にリンクされたEntity.ChangedByUserId
)およびEntity.AddedByUser
(Entity.AddedByUserId
外部キー/関係にリンクされた) 2つのフィールドがあります
Linq to SQL でこれらのフィールドを熱心にロードするにはどうすればよいですか? クエリで単純な結合を行う必要がありますか? または他の方法がありますか?
自己参照テーブルでの Linq to SQL の熱心な読み込み http://img245.imageshack.us/img245/5631/linqtosql.jpg