Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 无法从类型的EntityReference的Value属性中设置或删除类型的对象_C#_Entity Framework_Ef Code First_Entity Framework 6_Navigation Properties - Fatal编程技术网

C# 无法从类型的EntityReference的Value属性中设置或删除类型的对象

C# 无法从类型的EntityReference的Value属性中设置或删除类型的对象,c#,entity-framework,ef-code-first,entity-framework-6,navigation-properties,C#,Entity Framework,Ef Code First,Entity Framework 6,Navigation Properties,我试图将一个对象添加到实体的导航属性中,但一直出现此异常 System.InvalidOperationException An object of type 'System.Collections.ObjectModel.Collection`1[[WakeSocial.BusinessProcess.Core.Domain.UserDevice, WakeSocial.BusinessProcess.Core.Domain, Version=1.0.0.0, Culture=neutral,

我试图将一个对象添加到实体的导航属性中,但一直出现此异常

System.InvalidOperationException
An object of type 'System.Collections.ObjectModel.Collection`1[[WakeSocial.BusinessProcess.Core.Domain.UserDevice, WakeSocial.BusinessProcess.Core.Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' cannot be set or removed from the Value property of an EntityReference of type 'WakeSocial.BusinessProcess.Core.Domain.UserDevice'.
System.NullReferenceException
Object reference not set to an instance of an object.
添加实体

    UserDevice device = new UserDevice();
    device.DeviceType = type;
    device.DeviceId = deviceId;
    device.PushId = pushId;
    device.HasFrontFacingCamera = hasFrontCamera;

    user.Devices.Add(device);
    await UpdateUser(user);


  public async Task<User> UpdateUser(User user)
  {
      Context.Entry(user).State = EntityState.Modified;
      await uow.SaveChangesAsync();
      return user;
  }
所以我的问题是导航属性是如何初始化的?我以为只有虚拟关键词就可以做到这一切\

更新

这在DbContext中存在

      //User
      modelBuilder.Entity<User>()
          .HasOptional(u => u.Devices)
          .WithMany()
          .WillCascadeOnDelete();
试试这个:

modelBuilder.Entity<User>()
          .HasMany(u => u.Devices)
          .WithOptional(d => d.User) 
          .Map(c => c.MapKey("UserId"));
modelBuilder.Entity()
.HasMany(u=>u.Devices)
.WithOptional(d=>d.User)
.Map(c=>c.MapKey(“UserId”);
试试这个:

modelBuilder.Entity<User>()
          .HasMany(u => u.Devices)
          .WithOptional(d => d.User) 
          .Map(c => c.MapKey("UserId"));
modelBuilder.Entity()
.HasMany(u=>u.Devices)
.WithOptional(d=>d.User)
.Map(c=>c.MapKey(“UserId”);

你的UpdateUser代码是什么样子的?此外,是否在数据库中为用户和用户设备表生成PK?您是否手动设置用户标识并自己跟踪标识?我的直觉告诉我你的映射和PKs可能有问题。@DDiVita我刚刚添加了updateUser代码。。。我自己使用与此类似的GuidComb.Generator生成主键,因此是的,我自己设置用户id。。你说我自己跟踪身份是什么意思?@DDiVita我添加了一个级联并从上下文中删除了配置。它可能是发生错误的地方,因为它是在添加之后开始发生的。您的UpdateUser代码是什么样子的?此外,是否在数据库中为用户和用户设备表生成PK?您是否手动设置用户标识并自己跟踪标识?我的直觉告诉我你的映射和PKs可能有问题。@DDiVita我刚刚添加了updateUser代码。。。我自己使用与此类似的GuidComb.Generator生成主键,因此是的,我自己设置用户id。。你说我自己跟踪身份是什么意思?@DDiVita我添加了一个级联并从上下文中删除了配置。它可能是发生错误的地方,因为它是在添加后开始发生的。这不起作用,因为用户设备没有用户的定义。我已将用户设备实体添加到问题中。这不起作用,因为用户设备没有用户的定义。我已将用户设备实体添加到问题中。
modelBuilder.Entity<User>()
          .HasMany(u => u.Devices)
          .WithOptional(d => d.User) 
          .Map(c => c.MapKey("UserId"));