无法更新记录,外键空错误实体框架5

时间:2014-10-27 23:05:44

标签: c# .net entity-framework

如果我添加一个新的外键对象并保存,它就可以了。如果我添加到外键对象列表并保存它的工作原理。但是,如果我删除列表然后添加新记录,它将失败并显示错误“无法将值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列。不允许空值”或沿着这些行。 我错过了什么?

0 个答案:

没有答案