use*_*618 50 c# entity-framework ef-code-first entity-framework-4.1
我Entity Framework 4.1首先在代码中有一个简单的代码:
PasmISOContext db = new PasmISOContext();
var user = new User();
user.CreationDate = DateTime.Now;
user.LastActivityDate = DateTime.Now;
user.LastLoginDate = DateTime.Now;
db.Users.Add(user);
db.SaveChanges();
user.Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") };
db.SaveChanges();
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
问题是我收到了错误
保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.
在
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我不明白为什么类似的操作有效.我的模型或ef-code-first首先出现了问题吗?
public class Avatar
{
[Key]
public int Id { get; set; }
[Required]
public string LinkInString { get; set; }
[NotMapped]
public Uri Link
{
get { return new Uri(LinkInString); }
set { LinkInString = value.AbsoluteUri; }
}
}
public class User
{
[Key]
public int Id { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Avatar Avatar { get; set; }
public virtual ICollection<Question> Questions { get; set; }
public virtual ICollection<Achievement> Achievements { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastLoginDate { get; set; }
public DateTime LastActivityDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*ral 165
对于那些仍然会在正确定义所有键的情况下出现此错误的人,请查看您的实体并确保不留下具有空值的datetime字段.
Dav*_*ock 15
出于任何原因,可能会抛出此错误消息.'InnerException'属性(或其InnerException,或者InnerException等)包含问题的实际主要原因.
了解问题发生的地方当然是有用的 - 工作单元中的哪个对象导致问题?异常消息通常会在"EntityEntries"属性中告诉您,但在这种情况下,由于某种原因,无法完成.这种诊断复杂性 - 'EntityEntries'属性为空 - 显然是因为某些实体不会为其关系公开外键属性.
即使OP由于未能DateTime为第二个实例初始化s 而得到错误User,它们也会得到诊断并发症 - 'EntityEntries'为空,以及令人困惑的顶级消息......因为其中一个实体没有'暴露外键属性'.要解决此问题,Avatar应该public virtual ICollection<User> Users { get; set; }定义一个属性.