C# 实体框架保存更改错误
我不确定这是否是一个bug,但在我看来很像。我首先使用Entity Framework 6.1.1代码,我有以下类:C# 实体框架保存更改错误,c#,asp.net,entity-framework,entity-framework-6,C#,Asp.net,Entity Framework,Entity Framework 6,我不确定这是否是一个bug,但在我看来很像。我首先使用Entity Framework 6.1.1代码,我有以下类: public class User { public int Id { get; set; } [Required] [MaxLength(20)] public string Username { get; set; } [Required] [MaxLength(200)] public string Password
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还是我做错了什么吗
谢谢 在使用实体框架时,我从未显式设置状态。如果删除行db.Entry\u user.State=System.Data.Entity.EntityState.Modified;您的代码仍能工作并将数据保存到数据库中吗?您已将实体配置为具有独立关联的用户上有CountryId属性和必需属性,这意味着Country属性需要有一个值 此代码不会加载国家/地区,因为它加载了延迟加载
User _user = db.Users.Find(Id);
除非你做类似的事情
var country = _user.Country; // this will load the Country
或者,您可以使用即时加载将国家/地区与主查询一起加载
User _user = db.Users.Include(x => x.Country).FirstOrDefault(x => x.Id == Id);
小贴士:
不需要使用EntityState.Modified的_用户进行标记,因为它是一个代理,更改跟踪器将知道是否要修改该实体。
对为了解决这个问题,我添加了这一行。如果我删除它,我将保持相同的行为。或者你可以简单地完全禁用延迟加载。dbContext.Configuration.LazyLoadingEnabled=false;谢谢这确实解释并解决了这个问题。@LazyTarget,不,关键是,国家必须有一个值,要么是惰性加载,要么是急切加载,要么是用id手动设置并将其附加到context@LazyTarget,禁用延迟加载不会自动加载所有导航属性,它仍然需要与Include一起明确提到,没有它,急切加载就不会发生happen@YuliamChandra哦,我想是的。那么,房产发生了什么变化?