Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架:保存更改后返回的对象不';我没有孩子_C#_Asp.net Mvc_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架:保存更改后返回的对象不';我没有孩子

C# 实体框架:保存更改后返回的对象不';我没有孩子,c#,asp.net-mvc,entity-framework,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Entity Framework 6,当我在数据库中保存一个对象,然后检索保存的对象时,它会显示所有空的子对象 public car save_car(car data) { if (data.id_car == 0) { _contextDrag.car.Add(data); _contextDrag.SaveChanges(); } else { _conte

当我在数据库中保存一个对象,然后检索保存的对象时,它会显示所有空的子对象

public car save_car(car data)
{
    if (data.id_car == 0)
    {                
        _contextDrag.car.Add(data);
        _contextDrag.SaveChanges();                          
    }
    else
    {
        _contextDrag.SaveChanges();
    }

    return data;
}

public car get_car(long id_car)
{            
    car data = _contextDrag.car.FirstOrDefault(a => a.idCar == id_car);            
    return data;
}
我使用EntityFramework 6,我一直使用下面示例中所示的查询,并且它一直工作正常,但我不理解为什么此查询显示空子对象

public car save_car(car data)
{
    if (data.id_car == 0)
    {                
        _contextDrag.car.Add(data);
        _contextDrag.SaveChanges();                          
    }
    else
    {
        _contextDrag.SaveChanges();
    }

    return data;
}

public car get_car(long id_car)
{            
    car data = _contextDrag.car.FirstOrDefault(a => a.idCar == id_car);            
    return data;
}

这是因为对多个操作重用了
\u contextDrag
。调用
save\u car
时,已保存的汽车存储在上下文中。然后调用
get\u car
-返回相同的car实例。如果它的所有子属性都为空(例如,您正在添加的是was new实体),那么它的所有子属性都将为空,并且延迟加载将不起作用,因为它与您在
save\u car
中的实体完全相同。像往常一样,最好的方法是永远不要重复使用您的上下文。

我在项目中应用了这个解决方案,它工作正常

我使用了
System.Data.Entity.EntityState.Detached

public car save_car(car data)
{
    if (data.id_car == 0)
    {                
        _contextDrag.car.Add(data);
        _contextDrag.SaveChanges();
        _contextDrag.Entry(data).State = System.Data.Entity.EntityState.Detached;
    }
    else
    {
       _contextDrag.SaveChanges();
    }

    return dades;
}

public car get_car(long id_car)
{            
   car data = _contextDrag.car.FirstOrDefault(a => a.idCar == id_car);            
   return data;
}

我似乎也有类似的问题,但我似乎不明白为什么

当我在DataInitializer的末尾使用_context.SaveChanges()时,它会抛出一个自定义错误,这是我为另一个对象中的一个对象的setter(下面的代码)编写的

        public Locatie Locatie
        {
            get => _locatie;
            set
            {
                if (value is null)
                    throw new ArgumentException(Settings.locatieLeeg);
                else
                    _locatie = value;
            }
        }
但是,如果我消除了错误,它只会转到下一个setter,该setter也会检查null。这使我相信对象的所有子对象都设置为null。这以前不是问题,现在是,我不知道为什么要说实话

有什么理论吗

编辑:控制台的输出卡在此处:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (52ms) [Parameters=[@p0='?' (Size = 100), @p1='?' (Size = 4000), @p2='?' (Size = 100), @p3='?' (Size = 6), @p4='?' (Size = 100)], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [Locatie] ([Gemeente], [Huisnummer], [Land], [Postcode], [Straat])
      VALUES (@p0, @p1, @p2, @p3, @p4);
      SELECT [LocatieId]
      FROM [Locatie]
      WHERE @@ROWCOUNT = 1 AND [LocatieId] = scope_identity();
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (31ms) [Parameters=[@p5='?' (Size = 320), @p6='?' (DbType = Int32), @p7='?' (Size = 14)], CommandType='Text', CommandTimeout='30']
      SET NOCOUNT ON;
      INSERT INTO [ContactPagina] ([Email], [LocatieId], [Telefoonnummer])
      VALUES (@p5, @p6, @p7);
      SELECT [ContactPaginaId]
      FROM [ContactPagina]
      WHERE @@ROWCOUNT = 1 AND [ContactPaginaId] = scope_identity();
答复:


我设法把它修好了,但我不知道怎么修。我清理了ApplicationDataInitializer类,对映射器、存储库进行了更改,并将作为类对象的属性拆分为不同的声明,并逐个保存。所有这些都设法解决了问题,但我不知道是什么。

看来你是.Net世界的新手,请查看新帖子的代码约定谢谢你的帮助,到目前为止,使用相同的上下文和执行相同的过程都没有问题,先保存了一个对象,然后再次检索。你很幸运,但是如果您继续这样做,您将遇到更多令人惊讶和难以调试的问题。您是否更新了db连接器?我曾经在更新Mysql.Data.Entity连接器时遇到过这种类型的问题。我最后不得不回到以前的版本。事实并非如此。谢谢你的回答。