我正处于从XML文件导入大量“链接”记录的情况,我想使用Entity Framework将它们插入到我的SQL链接表中。我的链接表实际上只有2列,这两列都是FK并构成PK:
[UserAssessmentId] [int] NOT NULL
[AnswerId] [int] NOT NULL
我习惯于插入的方式涉及以下内容:
UserAssessment
。userAssessmentId
实体
Answer
。answerId
实体
Answer
实体添加到UserAssessment
实体的Answers
集合。answerId
重复2和3以添加。context.SaveChanges()
。麻烦的是,当添加数百个答案时,这是非常DB密集的; EF必须获取每个答案的记录,它正在添加到链接表中!我只想插入一个给定userAssessmentId
和给定answerId
的记录,而不是先解决实体获取问题。 EF不用担心我插入的ID是否有效;只是假设他们是。有没有办法让EF做到这一点,还是我只需要使用纯SQL?
答案 0 :(得分:2)
最简单的选择可能是创建一个单独的上下文和一个简单的实体来表示你的链接表。
[Table("Name of the link table")]
public class UserAssessmentAnswer
{
public int UserAssessmentId { get; set; }
public int AnswerId { get; set; }
}
public class UserAssessmentAnswerContext : DbContext
{
public UserAssessmentAnswerContext()
: base("Connection string for the real context")
{
}
public IDbSet<UserAssessmentAnswer> UserAssessmentAnswers
{
get { return Set<UserAssessmentAnswer>(); }
}
}
然后您可以使用新的上下文和实体来插入数据:
using (var context = new UserAssessmentAnswerContext())
{
context.UserAssessmentAnswers.Add(new UserAssessmentAnswer
{
UserAssessmentId = ...,
AnswerId = ...
});
...
context.SaveChanges();
}
修改强>
您需要关闭新上下文的数据库初始化。在配置文件中,添加:
<entityFramework>
<contexts>
<context
type="YourNamespace.UserAssessmentAnswerContext, YourAssembly"
disableDatabaseInitialization="true"
/>
</contexts>
</entityFramework>
或者,您可以将以下代码添加到您的启动中:
Database.SetInitializer<UserAssessmentAnswerContext>(null);