类似情况:How to add several dependent records with LINQ2SQL (这似乎合乎逻辑,但对我来说不起作用)
ASP.NET MVC + Linq2SQL
我有2个名为Challenges and Participants的表。
参与者与挑战之间存在一对多关系 - 每个关键字为1(applicantId,RespondantId)。
我有一个输入表单,收集所有字段以创建新的申请人和响应者以及挑战。 Databinder将所有字段绑定到Challenge及其子参与者,但是,当浏览Linq2Sql创建的结构时,参与者对象的名称与挑战对象中的键名称不匹配(applicantId与Participant对象匹配,respondantId与Participant1匹配)对象)。
因此,当我在InsertOnSubmit(aChallenge)之后尝试SubmitChanges()时,我从Linq2Sql返回一个foreign_key约束验证消息。在SQL Server Profiler中,我可以看到正在正确创建参与者,但是当保存质询时,这些新插入的参与者的ID未被设置为质询对象,因此系统正在抛出外键违规消息。
我如何解决这个问题?
答案 0 :(得分:1)
你必须以我认为的方式编写它(假设你有参与者和挑战课程):
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();
Linq-to-SQL应自动分配这些属性(挑战和挑战),以便为您设置键值。
希望它有所帮助。
答案 1 :(得分:0)
您可能希望编辑数据对象(通常使用DBML设计器),并分别将Participant
- 类型的属性重命名为Applicant
和Respondent
。使用Participant
和Participant1
比使用它更容易。您可以在关联属性(连接表的行)中执行此操作。
如果要在Challenge
中分配外键,则有两种选择。如果您自己拥有Participant
个对象,则可以将它们分配给(新重命名的)Applicant
和Respondent
属性(并且LINQ to SQL将更新ApplicantID
或{{1因此)。或者,如果您拥有RespondentID
,则可以直接将其分配到ParticipantID
或ApplicantID
。