猿问

C# 无法从 DbContext 中删除对象

大家好,我正在尝试更新我的本地 sqldb,但没有成功。

我创建了一个 DbContext:


    public class DbContextWeather1 : DbContext

    {

        public DbSet<WeatherRoot> Weathers { get; set; }

}

WeatherRoot 在哪里:


public class Coord

{

    [JsonProperty("lon")]

    public double Longitude { get; set; } 


    [JsonProperty("lat")]

    public double Latitude { get; set; } 

}


public class Sys

{


    [JsonProperty("country")]

    public string Country { get; set; } 

}


public class Weather

{

    [JsonProperty("id")]

    public int Id { get; set; }


    [JsonProperty("main")]

    public string Main { get; set; }


    [JsonProperty("description")]

    public string Description { get; set; } 


    [JsonProperty("icon")]

    public string Icon { get; set; }



}


public class Main

{

    [JsonProperty("temp")]

    public double Temperature { get; set; } 

    [JsonProperty("pressure")]

    public double Pressure { get; set; } 


    [JsonProperty("humidity")]

    public double Humidity { get; set; } 

    [JsonProperty("temp_min")]

    public double MinTemperature { get; set; } 


    [JsonProperty("temp_max")]

    public double MaxTemperature { get; set; } 

}


public class Wind

{

    [JsonProperty("speed")]

    public double Speed { get; set; } 


    [JsonProperty("deg")]

    public double WindDirectionDegrees { get; set; } 


}


public class Clouds

{


    [JsonProperty("all")]

    public int CloudinessPercent { get; set; } 

}


我收到此错误:


The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Weathers_dbo.WeatherRoots_WeatherRoot_Name". The conflict occurred in database "WeatherApp.DataProtocol.DbContextWeather1", table "dbo.Weathers", column 'WeatherRoot_Name'.

The statement has been terminated.

我试图谷歌它,但只找到相关的密钥,这不是我的情况。

有没有人能帮帮我,我有点无奈。

谢谢。


心有法竹
浏览 339回答 2
2回答

大话西游666

这是由于外键约束而发生的。在删除父记录之前,您必须删除所有引用的子记录。根据您的业务逻辑修改后尝试应用以下代码并让EF处理它。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modelBuilder.Entity<Parent>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.HasMany<Child>(c&nbsp;=>&nbsp;c.Children) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.WithOptional(x&nbsp;=>&nbsp;x.Parent) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.WillCascadeOnDelete(true);如果您不确定关系是如何建立的,请使用 SQL Server 观察表并检查键和约束,如下所示

长风秋雁

从 DbSet.Remove 上的 MSDN 页面:“将给定实体标记为已删除,以便在调用 SaveChanges 时将其从数据库中删除。请注意,在调用此方法之前,该实体必须以其他状态存在于上下文中。”https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.remove(v=vs.113).aspx您可以尝试添加:db.SaveChanges();在您的召唤下:db.Weathers.Remove(bye);
随时随地看视频慕课网APP
我要回答