2016-03-30 14 views
0

まず、Entity Frameworkコードを使用して、以下のモデルを構築しています。何らかの理由でDBを更新した後、コンテキストでモデルを呼び出すと、エンティティフレームワークで列名が不正なクエリが生成されています。私はこれを試して修正したい。私はデータの注釈やFluent APIを使うことができますが、なぜ列名の最後に1を生成するのでしょうか。この列はDBまたはモデルにありません。Entity Framework最初にコードを含む間違った列を生成する

モデル

public class Answer 
{ 
    [Key] 
    public int AnswerId { get; set; } 
    public string AnswerText { get; set; } 
    public int Question_QuestionId { get; set; }  
} 

コンテキストコール

//GetTheAnswers 
var answers = context.Answers.Where(x => x.Question_QuestionId == selectedQuestion.QuestionId).ToList(); 

スタックエラー

{ "無効な列名 'Question_QuestionId1'。"}ここで

はレビュー

のための質問のモデルであります
public class Question 
{ 
    [Key] 
    public int QuestionId { get; set; } 
    public string QuestionText { get; set; } 
    public virtual Answer CorrectAnswer { get; set; } 
    public virtual List<Answer> Answers { get; set; } 
    public virtual LessonSpecification LessonSpecification { get; set; } 
    public virtual GrammarStandards GrammarStandard { get; set; } 
} 
+0

になります。 – DevilSuichiro

+0

あなたのレビューにQuestionモデルを追加しました。 –

答えて

0

これはアンサーモデルですか?おそらくタイプ質問プロパティの質問もあります。 Question_QuestionIdプロパティが[missing] Answer.Questionプロパティの外部キープロパティであることをEFに(属性/マッピングを使用して)伝える必要があります。

EDIT
Question.Answers回答テーブル上の質問への参照があることが必要です。 EFはAnswer.Question_QuestionIdプロパティと競合するAnswerテーブルにQuestion_QuestionIdという名前のフィールドを作成します(このEFでは新しいフィールドも作成されます)。
この新しいフィールドの名前はQuestion_QuestionId1です。 これはDDL文で見ることができます(EFは、関係のためにフィールドQuestion_QuestionId1のインデックスを作成します。また、関連フィールドはNULL可能です)。

ExecuteNonQuery========== 
CREATE TABLE [Answers] (
[AnswerId] int not null identity(1,1) 
, [AnswerText] text null 
, [Question_QuestionId] int not null 
, [Question_QuestionId1] int null 
); 
ALTER TABLE [Answers] ADD CONSTRAINT [PK_Answers_a5cb86ad] PRIMARY KEY ([AnswerId]) 
ExecuteNonQuery========== 
CREATE TABLE [Questions] (
[QuestionId] int not null identity(1,1) 
, [QuestionText] text null 
, [CorrectAnswer_AnswerId] int null 
); 
ALTER TABLE [Questions] ADD CONSTRAINT [PK_Questions_a5cb86ad] PRIMARY KEY ([QuestionId]) 
ExecuteNonQuery========== 
CREATE INDEX [IX_Question_QuestionId1] ON [Answers] ([Question_QuestionId1]) 
ExecuteNonQuery========== 
CREATE INDEX [IX_CorrectAnswer_AnswerId] ON [Questions] ([CorrectAnswer_AnswerId]) 

奇妙なことは、EF 6.1.3ではクエリが正常に動作していることです。

とにかく、私は

すなわち、この場合の最善の修正がモデルを修正することだと思い
public class Answer 
{ 
    [Key] 
    public int AnswerId { get; set; } 
    public string AnswerText { get; set; } 
    //public int Question_QuestionId { get; set; } 
    public virtual Question Question { get; set; } 
} 


public class Question 
{ 
    [Key] 
    public int QuestionId { get; set; } 
    public string QuestionText { get; set; } 
    public virtual Answer CorrectAnswer { get; set; } 
    public virtual List<Answer> Answers { get; set; } 
} 

class Context : DbContext 
{ 

    public Context(DbConnection connection) 
     : base(connection, false) 
    { 
    } 

    public DbSet<Answer> Answers { get; set; } 
    public DbSet<Question> Questions { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Question>() 
      .HasMany(q => q.Answers) 
      .WithOptional(x => x.Question); 

     base.OnModelCreating(modelBuilder); 

    } 
} 

問合せは、質問モデルが同様に関連するかもしれない

var answers = context.Answers.Where(x => x.Question.QuestionId == selectedQuestion.Question.QuestionId).ToList(); 
+0

これはアンサーモデルです。私はこれを二重にチェックしました。 DB内の列の名前はQuestion_QuestionIdです。 –

+0

プロパティQuestion.Answersでは、EFがAnswerテーブルにフィールドを作成する必要があります。しかし、あなたのモデルとEF 6.1.3でうまく動作します。とにかく、詳細は答えを見てください。 – bubi

+0

私はモデルをあなたが答えに入れたものに編集しました。そして、これはマイグレーションのように見えます。あなたの考えは? –

関連する問題