我不確定這是否是一個錯誤,但看起來像我。我使用實體框架6.1.1代碼首先,我有以下類:實體框架SaveChanges錯誤
public class User
{
public int Id { get; set; }
[Required]
[MaxLength(20)]
public string Username { get; set; }
[Required]
[MaxLength(200)]
public string Password { get; set; }
[Required]
public virtual Country Country { get; set; }
}
public class Country
{
[Key]
public int Id { get; set; }
[Required]
[MaxLength(3)]
public string CountryCode { get; set; }
[Required]
[MaxLength(20)]
public string CountryName { get; set; }
}
當我嘗試更新與下面的代碼的用戶密碼我得到一個錯誤:
User _user = db.Users.Find(Id);
_user.Password = Password;
db.Entry(_user).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
錯誤: 一個或多個實體的驗證失敗。有關更多詳細信息,請參閱「EntityValidationErrors」屬性。驗證錯誤是:需要國家字段「}
的一點是,如果我這樣做與物業_user.Country.Id任何交互,它的工作原理是這樣的:。
User _user = db.Users.Find(Id);
_user.Password = Password;
Console.Write(_user.Country.Id.ToString());
db.Entry(_user).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
任何想法如果這是一個已知的bug或我做錯了什麼?
謝謝!
或者您可以完全禁用延遲加載。 'dbContext.Configuration.LazyLoadingEnabled = false;' – LazyTarget 2014-09-19 06:29:53
謝謝!這真的解釋和解決了這個問題。 – 2014-09-19 06:32:27
@LazyTarget,不,重點在於'Country'必須有一個值,可以是延遲加載,急切加載,或者使用id手動設置它,並將其附加到上下文 – 2014-09-19 06:32:47