0

XML ファイルから多数の「リンク」レコードをインポートしている状況にあり、それらを Entity Framework を使用して SQL リンク テーブルに挿入したいと考えています。私のリンク テーブルは文字通り 2 つの列だけで、どちらも FK であり、PK を構成します。

[UserAssessmentId] [int] NOT NULL
[AnswerId] [int] NOT NULL

私が挿入に慣れている方法には、次のものが含まれます。

  1. UserAssessmentの DB からエンティティを取得しuserAssessmentIdます。
  2. Answerの DB からエンティティを取得しanswerIdます。
  3. エンティティのコレクションAnswerにエンティティを追加します。UserAssessmentAnswers
  4. answerId追加するそれぞれについて 2 と 3 を繰り返します。
  5. コールしcontext.SaveChanges()ます。

問題は、何百もの回答を追加するときにこれが非常に DB 集約的であることです。EF は、リンク テーブルに追加する各回答のレコードを取得する必要があります。userAssessmentId指定された、および指定された を含むレコードを挿入したいだけで、answerId最初にエンティティを取得する手間をかけたくありません。挿入する ID が有効かどうかを EF が気にする必要はありません。そうだと仮定してください。EFにこれをさせる方法はありますか、それとも単純なSQLを使用する必要がありますか?

4

1 に答える 1

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);
于 2013-03-27T18:35:33.470 に答える