Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 实体框架在添加和删除状态下更新异常关系_C#_.net_Wpf_Entity Framework_Updateexception - Fatal编程技术网

C# 实体框架在添加和删除状态下更新异常关系

C# 实体框架在添加和删除状态下更新异常关系,c#,.net,wpf,entity-framework,updateexception,C#,.net,Wpf,Entity Framework,Updateexception,我有一张植物和信息的表格 植物有一个ID,名称,…,主信息ID 信息具有ID、标题、…、PlantID 一个工厂可以有很多信息,但只有一个主信息。信息只能有一个工厂 我有一个ViewModel类,它包含绑定到窗口的可观察的植物和信息集合 当我试图更改植物的主要信息时。我得到这个错误: 来自“FK_Plants_Information”关联的关系处于“Added”状态。给定多重性约束,相应的“信息”也必须处于“添加”状态 如果我选择了一个没有被任何工厂使用的信息,它会显示“添加”状态,如果我选择了

我有一张植物和信息的表格

植物有一个ID,名称,…,主信息ID

信息具有ID、标题、…、PlantID

一个工厂可以有很多信息,但只有一个主信息。信息只能有一个工厂

我有一个ViewModel类,它包含绑定到窗口的可观察的植物和信息集合

当我试图更改植物的主要信息时。我得到这个错误:

来自“FK_Plants_Information”关联的关系处于“Added”状态。给定多重性约束,相应的“信息”也必须处于“添加”状态

如果我选择了一个没有被任何工厂使用的信息,它会显示“添加”状态,如果我选择了一个正在使用的信息,它会显示“删除”状态

**类PlantsViewModel:ViewModelBase
{
私有DAL_DAL=新DAL();
私有可观测集合_plants=新可观测集合();
公共可观测收集植物
{
获取{return\u plants;}
设置
{ 
_植物=价值;
_不动产变更(“工厂”);
}
}
私人工厂(选定工厂);;
公共植物选择植物
{
获取{return\u selectedPlant;}
设置
{
_所选植物=价值;
_物业变更(“选定工厂”);
}
}
私有ObservableCollection_信息=新ObservableCollection();
公共可观测收集信息
{
获取{return\u information;}
设置
{ 
_信息=价值;
_关于财产变更(“信息”);
}
}
}
窗口:

<TextBox Grid.Column="1" Grid.Row="0" Width="150" Text="{Binding Path=SelectedPlant.LatinName}" />
            <TextBox Grid.Column="1" Grid.Row="1" Width="150" Text="{Binding Path=SelectedPlant.LocalName}" />
            <TextBox Grid.Column="1" Grid.Row="2" Width="150" Text="{Binding Path=SelectedPlant.CycleTime}" />
            <ComboBox Grid.Column="1" Grid.Row="3" Width="150" ItemsSource="{Binding Path=Information}"
                      DisplayMemberPath="Title"
                      SelectedValue="{Binding Path=SelectedPlant.MainInformation, Mode=TwoWay}" />

达尔看起来像这样

    public class DAL { 
    private static Entities _context = new Entities();

    public void SaveChanges()
    {
        _context.SaveChanges();
    }
    public List<Plant> GetAllPlants()
    {
        return _context.Plants.ToList();
    }

    public void AddNewPlant(Plant plant)
    {
        _context.Plants.AddObject(plant);
    }

    public void DeletePlant(Plant plant)
    {
        _context.DeleteObject(plant);
    } 
    }
公共类DAL{
私有静态实体_context=新实体();
公共void SaveChanges()
{
_SaveChanges();
}
公共列表GetAllPlants()
{
return_context.Plants.ToList();
}
公共厂房(厂房)
{
_context.Plants.AddObject(plant);
}
公用厂房(厂房)
{
_删除对象(植物);
} 
}

另外,如果这里有什么不好的地方,请告诉我(比如有一个静态上下文,我将viewModel连接到dal的方式等等…(我是一个初学者,所以我真的不知道如何正确使用它)

错误表明您缺少一个必填字段。我猜这是
MainInformation
。您可以执行以下操作:

Dal.AddPlant(new Plant { MainInformation = new Information() });

是的,使用静态上下文不是一个好主意。有一些。

错误表明您缺少一个必填字段。我猜是
MainInformation
。您可以执行以下操作:

Dal.AddPlant(new Plant { MainInformation = new Information() });

是的,使用静态上下文是个坏主意。有一些。

但我不是在添加植物,我只是在更改其主要信息。它都绑定到窗口,所以我不认为缺少任何内容,我尝试了查看(在保存更改之前,查看是否有对任何内容的空引用)我看不出有什么遗漏…你能给我一些建议,如何检查是否遗漏了什么吗?哦,我明白了。那么,你的绑定可能是错误的。看起来链接控件导致了插入而不是更新,可能是因为没有检测到密钥。不过,我在这方面不是专家。你尝试过使用实体数据吗ce?它应该为您解决这个问题。但我不是在添加植物,我只是在更改它的主要信息。它都绑定到了窗口,所以我不认为缺少任何内容,我尝试了查找(在保存更改之前,查看是否有对任何内容的空引用)我看不出有什么遗漏…你能给我一些建议,如何检查是否遗漏了什么吗?哦,我明白了。那么,你的绑定可能是错误的。看起来链接控件导致了插入而不是更新,可能是因为没有检测到密钥。不过,我在这方面不是专家。你尝试过使用实体数据吗ce?它应该会帮你处理的。