如果我添加一个新的外键对象并保存,它就可以了。如果我添加到外键对象列表并保存它的工作原理。但是,如果我删除列表然后添加新记录,它将失败并显示错误“无法将值NULL插入列”,并且更新查询中将省略外键。
EF:
public class TestIdentityDbContext : IdentityDbContext<TestUser>
{
public TestIdentityDbContext ()
: base("TestIdentityEntities")
{
}
public DbSet<UserAddress> UserAddresses { get; set; }
}
型号:
public class TestUser : IdentityUser
{
public TestUser()
{
this.Address = new List<UserAddress>();
}
public string SessionId { get; set; }
public virtual IList<UserAddress> Address { get; set; }
}
[Table("UserAddress")]
public partial class UserAddress
{
public int Id { get; set; }
public string UserId { get; set; }
public string BuildingName { get; set; }
public string UnitNumber { get; set; }
public string StreetAddress { get; set; }
public string PoBox { get; set; }
public string PostCode { get; set; }
public string StateRegion { get; set; }
public bool IsDeleted { get; set; }
public TestUser TestUser { get; set; }
}
添加新地址:
public void UpdateUser(TradeulatorUser user)
{
var loadedUser = _context.Users.FirstOrDefault(u => u.UserName == user.UserName);
loadedUser.SessionId = user.SessionId ;
//loadedUser.Address.Clear();
foreach (var address in user.Address)
{
loadedUser.Address.Add(address)
}
_context.Users.AddOrUpdate(loadedUser);
_context.SaveChanges();
}
注意该行注释掉了。如果此行已注释掉,则一切正常,新地址将附加到任何已存在的地址并保存到数据库中。即使当前没有用户的地址,也会添加新地址并且它可以正常工作。但是,如果我取消注释该行以清除地址并尝试保存新地址,那就是当我收到错误“无法将值NULL插入表UserAddress上的UserId列。不允许空值”或沿着这些行。 我错过了什么?