当前位置: 首页 > 编程语言 > C#

使用EF插入一个多对多关系的操作分享

时间:2023-04-11 11:40:42 C#

使用EF插入一个多对多关系的操作我有两个模型类:publicclassCandidate{publicintId{得到;放;}publicstring}publicICollectionJobs{get;放;}}publicclassJob{publicintId{get;放;}公共字符串名称{得到;放;}publicICollectionCandidates{get;放;我DbContext名称是JobsContext。上面的代码生成了3个表Candidate,Job和CandidateJob(由EF自动生成)现在我在Jobs表中有记录:Id=1,Name=“Sales”:Id=2,Name=“Engineer”。我想将一个新候选人与Jobs表中的2条记录关联到Candidates表中。在插入候选人之前我知道Jobs表的ID,我不想调用数据库以从Jobs表中获取更多详细信息。我如何使用EntityFramework5做到这一点?这个怎么样?职位销售职位;//已经从数据库中获取JobengineerJob;//已经从数据库中获取Candidatecandidate=newCandidate();candidate.Name="李四";candidate.Jobs=newList();//您也可以在Candidatecandidate.Jobs.Add(salesJob)的构造函数中执行此操作;candidate.Jobs.Add(engineerJob);context.SaveChanges();仅当您在同一个DbContext实例中从数据库中提取作业DbContext时才会出现这种情况,否则EF会将作业视为“新”作业并尝试插入它们。如果只有ID,可以尝试以下操作:varsalesJob=newJob{Id=salesJobId};varengineerJob=newJob{Id=engineerJobId};context.Jobs.Attach(salesJob);context.Jobs.Attach(engineerJob);candidate.Jobs.Add(salesJob);candidate.Jobs.Add(engineerJob);context.SaveChanges();有两种选择。如果要使用相同的上下文和候选人,只需将现有候选人添加到工作中即可。示例:创建候选人并将其保存到数据库:JobsContextcontext=newJobsContext();varcandidate1=newCandidate(){Name="JohnSmith"};//id1varcandidate2=newCandidate(){Name="JaneSmith"};//id2varcandidate3=newCandidate(){Name="JohnDoe"};//id3context.Candidates.Add(candidate1);context.Candidates.Add(candidate2);语境。Candidates.Add(candidate3);context.SaveChanges();然后,创建你的工作:varjob=newJob(){Name="GoodJob"};//id1最后,将候选人添加到新的工作变量中,将工作添加到上下文中并保存更改。job.Candidates.Add(candidate1);job.Candidates.Add(candidate2);context.Jobs.Add(工作);context.SaveChanges();或者,如果您正在使用创建候选人的不同上下文,您可以添加它创建一个新的候选人对象并将其附加到上下文,然后再将其添加到工作中。//与上面例子不同的上下文JobsContextnewContext=newJobsContext();//这可以是一个新的或现有的工作,在这里使用上面示例中的工作varexistingJob=newContext.Jobs.FirstOrDefault(j=>j.Id==1);通过仅设置ID创建候选对象varexistingCandidate3=newCandidate(){Id=3};将对象附加到新上下文。注意:如果上面示例中的上下文仍然存在,它不会让你这样做,因为它已经在跟踪候选人。newContext.Candidates.Attach(existingCandidate3);将状态设置为Unchanged因为我们不想创建新的候选人,只需使用现有的候选人。newContext.Entry(existingCandidate3).State=System.Data.EntityState.Unchanged;添加并保存更改。existingJob.Candidates.Add(existingCandidate3);newContext.SaveChanges();完毕!一个非常简单的解决方案是创建外部参照表的VIEW,与表(view_tablename_raw)完全相同。然后将EF中的视图更新为没有外键的实体。从他们的上下文中使用.view_tablename_raw.Add(…)它将无缝地工作。以上就是C#学习教程:使用EF插入多对多关系的操作。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: