我在让实体框架正确保存收益返回的结果时遇到问题。为了说明问题,我创建了两组方法,一组返回一个实体,另一组使用 yield return 返回一个 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 引发违反主键约束“PK_dbo.UserProfiles”的异常。另一个观察结果 - 如果我初始化一个 List 并返回它而不是 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 中的收益回报不起作用有何看法?谢谢