Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc Linq2Sql将记录插入到相关表_Asp.net Mvc_Linq To Sql - Fatal编程技术网

Asp.net mvc Linq2Sql将记录插入到相关表

Asp.net mvc Linq2Sql将记录插入到相关表,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,类似情况如下: (这似乎合乎逻辑,但对我不起作用) ASP.NET MVC+Linq2SQL 我有两张表,叫做挑战和参与者 挑战{challengeId, ChallengeDesc,Appliantid, respondantId} 参与者{participantId,FirstName,LastName} 参与者和挑战之间存在1-多个关系-每个关键点1个(AppliantId、RespondantId) 我有一个输入表单,收集所有字段以创建新的申请人、响应者和挑战。Databinder将

类似情况如下: (这似乎合乎逻辑,但对我不起作用)

ASP.NET MVC+Linq2SQL

我有两张表,叫做挑战和参与者

  • 挑战{challengeId, ChallengeDesc,Appliantid, respondantId}
  • 参与者{participantId,FirstName,LastName}
参与者和挑战之间存在1-多个关系-每个关键点1个(AppliantId、RespondantId)

我有一个输入表单,收集所有字段以创建新的申请人、响应者和挑战。Databinder将所有字段绑定到质询及其子参与者,但是,在浏览由Linq2Sql创建的结构时,参与者对象的名称与质询对象中的键名称不匹配(AppliantId与参与者对象匹配,respondantId与参与者1对象匹配)

因此,当我尝试在InsertOnSubmit(aChallenge)之后提交changes()时,我会从Linq2Sql返回一条外键约束验证消息。在SQL Server Profiler中,我可以看到参与者的创建是正确的,但在保存质询时,这些新插入的参与者的ID没有设置为质询对象,因此系统会抛出外键冲突消息


如何克服此问题?

您可能希望编辑数据对象(通常使用DBML设计器),并将
参与者
键入的属性分别重命名为
申请人
应答者
。与
参与者
参与者1
相比,使用它更容易。可以在关联属性(连接表的行)中执行此操作


挑战
中分配外键时,有两种选择。如果您拥有
参与者
对象本身,则可以将它们分配给(新重命名的)
申请人
响应者
属性(并且LINQ to SQL将相应地更新
应用者ID
响应者ID
)。或者,如果您有
ParticipantID
s,您可以直接将它们分配给
applicationid
RespondentID

我认为您必须这样写(假设您有课程参与者和挑战):

LINQtoSQL应该自动分配这些属性(挑战和挑战),以便为您设置键值

希望能有帮助

Participant applicant = new Participant();
Participant respondant = new Participant();
//update your participants here

Challenge insertedChallenge = new Challenge();
//update your challenge values here

applicant.Challenges.add(insertedChallenge);
respondant.Challenges1.add(insertedChallenge);

submitChanges();