实体框架错误:操作失败:无法更改关系,因为一个或多个外键属性不可为空

问题描述 投票:0回答:1

我有一个名为

Transaction
的模型类(实体框架代码优先,如果重要的话)。部分课程是:

private List<Client> _clients;

public List<Client> Clients
{
    get
    {
        if (_clients != null)
        {
            return _clients;
        }
    
        return new List<Client>() 
        {
                new Client()
                {
                    FirstName = "[Client Name]",
                    LastName = "[No client added.]",
                }
        };
    }
    set
    {
        _clients = value;
    }
}

我已将

Transaction
模型添加到 IdentityModels。如果我使用这个
Transaction
类运行代码,当我尝试在运行时实例化
Transaction
时出现错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

确认一下,错误发生在我尝试创建一个新的

Transaction
对象时。因此,为了摆脱记录并创建一个新对象,我将上面的内容替换为:

public List<Client> Clients { get; set; }

这显然没有像我想要的那样进行错误/空检查。

有人可以向我解释为什么会发生这种情况以及如何“修复”它同样重要吗? (即在不获取运行时错误的情况下实施错误检查)。 TIA

c# entity-framework
1个回答
0
投票

我仍然不知道为什么会发生错误。当然,它与实体框架在现有列表为空时尝试创建并返回新的客户端列表有关。无论如何,我最终所做的现在显而易见的解决方案只是创建一个返回 Clients 值的访问器方法,而不是将代码逻辑推入 get{} 中。简单地说:

public List<Client> Clients { get; set; }

public List<Client> GetClients
{
   //The null checking logic and return of Clients go here
}
© www.soinside.com 2019 - 2024. All rights reserved.