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"));