Javascript 在一对多关系上创建重复条目
我希望有人能在这里帮我,这已经让我两天都很烦恼了 我有一个使用AngularJS构建的小系统,使用实体框架代码优先项目作为数据层。然而,要使ProjectDetails和ProjectType之间的一对多关系正常工作,我遇到了一些问题 ProjectTypes表包含4条记录(每条记录都是项目的一种类型),ProjectDetails表中的每条记录都应该包含其中一条记录的ID作为外键。一切都很直截了当 代码编译得很好,但是当我运行它时,它表现出一些奇怪的行为,我不确定问题是出在EF映射还是我的AngularJS代码上 AngularJS页面是一个表单,允许用户通过下拉列表选择项目类型。初始表单提交很好,并添加了正确的项目类型。但是,如果我返回并编辑表单(选择新的项目类型),它将复制ProjectType表中当前选择的项目类型,并将新类型的ID分配给表单提交 提交编辑后的表单时,我使用Chrome中的console.log查看了模型。ProjectType_Id属性(application.projectdetails.ProjectType_Id)已正确更新,但ProjectType(application.projectdetails.ProjectType)对象尚未正确更新 我在下面附上了我认为与我的项目相关的部分的截图。任何帮助都将不胜感激 应用程序 总体应用程序表的相关模型属性Javascript 在一对多关系上创建重复条目,javascript,c#,angularjs,entity-framework,Javascript,C#,Angularjs,Entity Framework,我希望有人能在这里帮我,这已经让我两天都很烦恼了 我有一个使用AngularJS构建的小系统,使用实体框架代码优先项目作为数据层。然而,要使ProjectDetails和ProjectType之间的一对多关系正常工作,我遇到了一些问题 ProjectTypes表包含4条记录(每条记录都是项目的一种类型),ProjectDetails表中的每条记录都应该包含其中一条记录的ID作为外键。一切都很直截了当 代码编译得很好,但是当我运行它时,它表现出一些奇怪的行为,我不确定问题是出在EF映射还是我的An
public ProjectDetails ProjectDetails { get; set; }
项目详细信息
“项目详细信息”表的相关模型属性(与“应用程序”的关系为1-1)
public Nullable<int> ProjectType_Id { get; set; }
public virtual Application Application { get; set; }
public virtual ProjectType ProjectType { get; set; }
选择选项标签:
ng-repeat="p in projecttypes" value="{{p.Id}}">{{p.ProjectName}}
后端保存代码:
这不会直接更新表单,而是创建应用程序的新版本
public void UpdateApplication(Application existingItem)
{
if (existingItem == null)
throw new ValidationException("An application is required.");
if (existingItem.ParentApplication == 0)
{
existingItem.ParentApplication = existingItem.Id;
}
existingItem.Id = 0;
existingItem.DateSubmitted = DateTime.Now;
existingItem.LatestVersion = true;
existingItem.ApplicationGuid = Guid.NewGuid();
_context.Application.Add(existingItem);
_context.SaveChanges();
}
请显示保存项目的服务器端代码。您好,我已经添加了保存表单的代码。如上所述,它不会更新表单,而是创建一个新版本。嗯……为什么
existingItem.ApplicationGuid=Guid.NewGuid();
如果它正在更新?另外,请注意`\u context.Application.Add(existingItem);`theAdd(object)如果当前上下文未跟踪现有项
,则将插入新行。因此,最好先将您的现有项
附加到该项上……(它将使用主键进行更新-因此主键是必需的)。抱歉,该方法的名称有误导性。该方法所做的是在每次提交表单时创建一个新记录,而不是更新原始记录。这是客户的要求。非常常见的混淆:
ng-model="application.ProjectDetails.ProjectType_Id"
ng-repeat="p in projecttypes" value="{{p.Id}}">{{p.ProjectName}}
public void UpdateApplication(Application existingItem)
{
if (existingItem == null)
throw new ValidationException("An application is required.");
if (existingItem.ParentApplication == 0)
{
existingItem.ParentApplication = existingItem.Id;
}
existingItem.Id = 0;
existingItem.DateSubmitted = DateTime.Now;
existingItem.LatestVersion = true;
existingItem.ApplicationGuid = Guid.NewGuid();
_context.Application.Add(existingItem);
_context.SaveChanges();
}