如何使用实体框架删除相关字段

杰森

我有一个这样的对象:

public class MyObject
{
    [Key]
    public int Id { get; set; }

    public string ExternalNumber { get; set; }


    public virtual InternalProperties InProperties { get; set; }

    public virtual ICollection<AdditionalPrice> PriceHistory{ get; set; }
}

和InternalProperties类:

public class InternalProperties
{
    [Key]
    public int Id { get; set; }
    public string  Field1{get; set;}
}

和价格历史:

public class AdditionalPrice
{
    [Key]
    public int Id { get; set; }
    public double? Price { get; set; }
}

我的上下文如下所示:

public class myContext : DbContext
{
        static myContext ()
        {
            Database.SetInitializer<myContext >(null);
        }

        public myContext ()
            : base("myCtx")
        {
        }

        public DbSet<MyObject> Objects{ get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
           modelBuilder.Entity<myObject>().HasOptional(m => m.InProperties );
           modelBuilder.Entity<myObject>().HasMany(m => m.PriceHistory);
        }

}

最后,我试图像这样删除myObjects:

            using (var _sdb = new MyContext())
            {
                _sdb.Configuration.AutoDetectChangesEnabled = false;
                var myList = _sdb.Objects.Where(m => m.Id > 5).OrderBy(c => c.Id).ToList();
                foreach(var obj in myList)
                {
                 _sdb.Objects.Remove(obj)
                }

            }
_sdb.SaveChanges();

我在SaveChanges()中收到此异常:

{“在保存不公开其关系的外键属性的实体时发生错误。EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源。通过暴露可以使保存过程中的异常处理更容易实体类型中的外键属性。有关详细信息,请参见InnerException。“}

内部异常说:

{“ DELETE语句与REFERENCE约束\“ FK_dbo.AdditionalPrice_dbo.MyObject_MyObject_Id \”发生冲突。冲突发生在数据库“ myobject \”,表\“ dbo.AdditionalPrice \”的列'myObject_Id'中。\ r \ n该语句已终止。“}

例外是很好的解释,但是我不知道如何安全地删除这些对象。感谢您的帮助。提前致谢。

克里斯托斯

我认为您需要这样的东西:

var pricesToBeDeleted = _sdb.AdditionalPrices.Where(ap=>ap.MyObjectId == obj.Id);
_sdb.AdditionalPrices.Remove(pricesToBeDeleted);
_sdb.Objects.Remove(obj)

AdditionalPrices是类型DbSet<AdditionalPrice>您应该在myContext课程中添加以下行

public DbSet<AdditionalPrice> Objects{ get; set; }

关于AdditionalPrice课程,我看不到的外键MyObject我认为您在那里错过了一些东西。我的意思是您可能会遇到以下类似情况:

public class AdditionalPrice
{
    [Key]
    public int Id { get; set; }
    public double? Price { get; set; }
    public int MyObjectId { get; set; }
}

MyObjectId外键在哪里如果名称MyObjectId与对应的列名称不同,则应更改它们以使它们彼此匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用实体框架从数据库中删除相关对象

来自分类Dev

实体框架:如何在一种相关实体上启用级联删除

来自分类Dev

如何使用实体框架显式加载特定实体的特定相关实体?

来自分类Dev

如何使用实体框架从数据库视图加载相关实体?

来自分类Dev

实体框架核心:如何使用嵌套字段更新记录?

来自分类Dev

使用实体框架删除记录

来自分类Dev

使用实体框架删除行

来自分类Dev

如何使用实体框架删除多个相同的行

来自分类Dev

Django Rest框架,如何使用foreignkey_id字段包含'__all__'字段和相关字段

来自分类Dev

如何在实体框架中按多个相关实体过滤

来自分类Dev

使用 Linq 在实体框架中查询嵌套/相关实体

来自分类Dev

使用实体框架返回所有相关实体

来自分类Dev

使用linq和相关实体查询实体框架7

来自分类Dev

实体框架加载相关实体

来自分类Dev

使用实体框架或实体框架核心删除父子关系

来自分类Dev

如何使用实体框架从 List<A> 中选择 List<B>,其中 A 和 B 是多对多相关的?

来自分类Dev

如何使用相关数据为实体框架核心数据播种

来自分类Dev

使用Breeze删除实体框架对象图

来自分类Dev

无法使用 dbSet 删除 - 实体框架

来自分类Dev

使用linq的实体框架级联删除

来自分类Dev

使用实体框架删除记录时出错

来自分类Dev

使用实体框架异步删除行

来自分类Dev

使用实体框架删除数据

来自分类Dev

如何为实体框架已经跟踪的记录加载相关数据

来自分类Dev

实体框架核心相关数据

来自分类Dev

如何使用Entity Framework代码优先从数据库中删除所有相关实体

来自分类Dev

如何找出表中哪个字段已更改?实体框架在C#中使用

来自分类Dev

如何使用实体框架仅更新一个字段?

来自分类Dev

如何使用Fluent验证针对实体框架核心字段属性进行验证

Related 相关文章

  1. 1

    使用实体框架从数据库中删除相关对象

  2. 2

    实体框架:如何在一种相关实体上启用级联删除

  3. 3

    如何使用实体框架显式加载特定实体的特定相关实体?

  4. 4

    如何使用实体框架从数据库视图加载相关实体?

  5. 5

    实体框架核心:如何使用嵌套字段更新记录?

  6. 6

    使用实体框架删除记录

  7. 7

    使用实体框架删除行

  8. 8

    如何使用实体框架删除多个相同的行

  9. 9

    Django Rest框架,如何使用foreignkey_id字段包含'__all__'字段和相关字段

  10. 10

    如何在实体框架中按多个相关实体过滤

  11. 11

    使用 Linq 在实体框架中查询嵌套/相关实体

  12. 12

    使用实体框架返回所有相关实体

  13. 13

    使用linq和相关实体查询实体框架7

  14. 14

    实体框架加载相关实体

  15. 15

    使用实体框架或实体框架核心删除父子关系

  16. 16

    如何使用实体框架从 List<A> 中选择 List<B>,其中 A 和 B 是多对多相关的?

  17. 17

    如何使用相关数据为实体框架核心数据播种

  18. 18

    使用Breeze删除实体框架对象图

  19. 19

    无法使用 dbSet 删除 - 实体框架

  20. 20

    使用linq的实体框架级联删除

  21. 21

    使用实体框架删除记录时出错

  22. 22

    使用实体框架异步删除行

  23. 23

    使用实体框架删除数据

  24. 24

    如何为实体框架已经跟踪的记录加载相关数据

  25. 25

    实体框架核心相关数据

  26. 26

    如何使用Entity Framework代码优先从数据库中删除所有相关实体

  27. 27

    如何找出表中哪个字段已更改?实体框架在C#中使用

  28. 28

    如何使用实体框架仅更新一个字段?

  29. 29

    如何使用Fluent验证针对实体框架核心字段属性进行验证

热门标签

归档