实体框架,更新实体异常
本文关键字:实体 异常 更新 框架 | 更新日期: 2023-09-27 18:14:19
我有以下类:
public class LbsNetwork : BaseEntity
{
public virtual Guid Uuid { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
[InverseProperty("Network")]
public virtual ICollection<LbsSubNetwork> SubNetworks { get; set; }
}
public class LbsSubNetwork:BaseEntity
{
public virtual int ForeignId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual int Major { get; set; }
[InverseProperty("SubNetworks")]
[Required]
public virtual LbsNetwork Network { get; set; }
[InverseProperty("SubNetwork")]
public virtual ICollection<LbsDevice> Devices { get; set; }
}
public class LbsDevice:BaseEntity
{
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual int Minor { get; set; }
public virtual int ForeignId { get; set; }
[InverseProperty("Devices")]
[Required]
public virtual LbsSubNetwork SubNetwork { get; set; }
public virtual BeaconProximity Proximity { get; set; }
}
DbContext中的以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<LbsNetwork>().ToTable("LbsNetworks");
modelBuilder.Entity<LbsNetwork>().HasMany<LbsSubNetwork>(x=>x.SubNetworks)
.WithRequired(x=>x.Network).HasForeignKey(x=>x.ForeignId).WillCascadeOnDelete();
modelBuilder.Entity<LbsSubNetwork>().HasMany<LbsDevice>(x=>x.Devices)
.WithRequired(x=>x.SubNetwork).HasForeignKey(x=>x.ForeignId).WillCascadeOnDelete();
}
当我试图更新存储中LbsNetwork的现有实体时,我在Context.Save((方法中收到下一个异常:System.Data.Entity.Validation.DbEntityValidationException:属性:网络,消息:网络是必需的。
我认为实体中的一对多关系存在问题。我正在使用下一个代码来更新实体:
public void Update(LbsNetwork network)
{
Context.LbsNetworks.Attach(network);
((DbContext)Context.GetRealization()).Entry(network).State = EntityState.Modified;
Context.Save();
}
如果你把我的错误告诉我,我将不胜感激。非常感谢。
[InverseProperty("SubNetworks")]
[Required]
public virtual LbsNetwork Network { get; set; }
这会导致查询出现问题。我认为在导航属性中放入Required
验证属性不是一个好主意。你应该把它放在外键里。
[InverseProperty("SubNetworks")]
public virtual LbsNetwork Network { get; set; }