簡體   English   中英

實體框架,更新實體異常

[英]Entity Framework, updating entity exception

我正在上以下課程:

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:Propetry:網絡,Message:需要網絡。”

我認為實體中的一對多關系存在問題。 我正在使用下一個代碼更新實體:

    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; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM