Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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
为什么在我的DataContext中执行更新时导航属性正在更新另一个实体?(C#实体框架)_C#_Asp.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

为什么在我的DataContext中执行更新时导航属性正在更新另一个实体?(C#实体框架)

为什么在我的DataContext中执行更新时导航属性正在更新另一个实体?(C#实体框架),c#,asp.net,entity-framework,entity-framework-4,C#,Asp.net,Entity Framework,Entity Framework 4,我在使用实体框架(EF)时遇到了一个让我完全困惑的情况。我正在做一个简单的更新,我得到的错误是 违反主键约束“PK_utblproducts_Mark_uu03e07f87”。无法在对象“healthc.tblProducts\u MarketSegmentGroups”中插入重复键。 声明已终止 让我给你介绍一下这个问题的背景 我使用的是Web表单,有一个按钮click event fire可以将一些数据保存在页面上的几个文本框控件中 我的数据库中有一个名为tblMetaProducts的表,

我在使用实体框架(EF)时遇到了一个让我完全困惑的情况。我正在做一个简单的更新,我得到的错误是

违反主键约束“PK_utblproducts_Mark_uu03e07f87”。无法在对象“healthc.tblProducts\u MarketSegmentGroups”中插入重复键。 声明已终止

让我给你介绍一下这个问题的背景

我使用的是Web表单,有一个按钮click event fire可以将一些数据保存在页面上的几个文本框控件中

我的数据库中有一个名为tblMetaProducts的表,该表用于存储我们合作的各个供应商的产品信息。此表的实体称为产品

我还有一个名为tblTechAssessment的表,其中包含有关供应商产品的技术问题的数据(例如,软件可以在什么操作系统上运行,版本号等)。此表的实体称为TechnicalAssessment。一个产品可以有许多技术评估,它们由产品id关联

最后,我在数据库中有一个名为tblProducts_MarketSegmentGroups的查找表,其中包含一个产品id和另一个id(我们不关心这个问题)。此表的实体称为ProductMarketSegmentGroup。一个产品可以有多个产品细分市场组,它们由产品id关联

下面是我正在执行的执行EF保存的代码

private void UpdateTechnicalAssessments(int productID)
{
    var technicalAssessments = VendorDirectoryController.GetTechnicalAssessments(productID);
    var technicalAssessmentTypes = Enum.GetValues(typeof(TechnicalAssessmentType)).Cast<TechnicalAssessmentType>();
    foreach (var technicalAssessmentType in technicalAssessmentTypes)
    {
        var typeName = technicalAssessmentType.ToString();
        var id = "SaveToProduction" + typeName + "TextBox";
        var results = ProductInformationPanel.FindDescendantsByType<TextBox>().Single(x => x.ID == id).Text;
        technicalAssessments.Single(x => x.QuestionID == (int)technicalAssessmentType).Results = results;
    }

    VendorDirectoryController.SaveChanges();            
}
private void UpdateTechnicalAssessments(int-productID)
{
var technicalAssessments=VendorDirectoryController.GetTechnicalAssessments(productID);
var technicalAssessmentTypes=Enum.GetValues(typeof(TechnicalAssessmentType)).Cast();
foreach(technicalAssessmentTypes中的var technicalAssessmentType)
{
var typeName=technicalAssessmentType.ToString();
var id=“SaveToProduction”+typeName+“TextBox”;
var results=ProductInformationPanel.finddescentdantsbytype().Single(x=>x.ID==ID).Text;
technicalAssessments.Single(x=>x.QuestionID==(int)technicalAssessmentType)。结果=结果;
}
VendorDirectoryController.SaveChanges();
}
SaveChanges()方法深入到我的域层,并调用dataContext.SaveChanges()方法

因此,我的问题是:

1) 我能做些什么来保存我的技术评估实体?
2) 为什么我的保存会影响ProductMarketSegmentGroup实体

我最终使用的解决方案是让我们的数据库管理员为更新创建一个proc。我一直无法理解为什么导航属性会引起如此大的麻烦。

我最终使用的解决方案是让我们的数据库管理员为更新创建一个过程。我一直无法理解为什么导航属性会引起如此大的麻烦。

您可能遇到了EF中的错误。我也在类似的东西上打了个比方(尽管我使用存储过程)


解决方案是应用中提到的修补程序:

您可能遇到了EF中的错误。我也在类似的东西上打了个比方(尽管我使用存储过程)

解决方案是应用以下内容中提到的修补程序: