EntityFrameworkでyieldreturnの結果を適切に保存する際に問題が発生します。2セットのメソッドを作成した問題を説明するために、1つはエンティティを返し、もう1つはyieldreturnを使用してIEnumerableを返します。ジャーナルはUserProfileを参照します。
セット1:
public static UserProfile CreateUser()
{
return new UserProfile() {
UserId = Guid.Parse("60a3987c-0aa6-4a93- a5d2-68c51122858b"),
UserName = "jason"
};
}
public static Journal CreateJournal(UserProfile userProfile)
{
return new Journal() { UserProfile = userProfile };
}
セット2:
public static IEnumerable<UserProfile> CreateUsers()
{
yield return new UserProfile() {
UserId =
Guid.Parse("02cd1e9f-5947-4b08-9616-5b4f4033d074"),
UserName = "john"
};
}
public static IEnumerable<Journal> CreateJournals(UserProfile userProfile)
{
yield return new Journal() { UserProfile = userProfile };
}
TestSet1とTestSet2は、それぞれSet1とSet2の結果を保存します。TestSet1は機能しますが、TestSet2はPRIMARYKEY制約の違反'PK_dbo.UserProfiles'の例外をスローします。別の観察-私がリストを初期化し、yield returnの代わりにそれを返す場合、それは機能します。
public static void TestSet1()
{
var u = CreateUser();
var j = CreateJournal(u);
_db.UserProfiles.Add(u);
_db.Journals.Add(j);
_db.Commit();
}
public static void TestSet2()
{
var uList = CreateUsers();
var jList = CreateJournals(uList.ElementAt(0));
_db.UserProfiles.Add(uList.ElementAt(0));
_db.Journals.Add(jList.ElementAt(0));
_db.Commit();
}
Set2のイールドリターンが機能しない理由についてどう思いますか?ありがとう