2012-05-03 6 views
0

コードファーストで列をマップする方法はありますか?それは選択時に移入されますが、挿入または更新時には使用されません。インサートから列を除外する

[NotMapped]注釈を適用した場合、プロパティ/列には値が設定されませんが、この注釈を追加しないと、挿入時に列が存在しないというエラーが表示されます。

理由私は、クエリを実行して結合を実行し、列の値を返すことを尋ねますが、挿入時にこの列は必要ありません。

任意のアイデアですか?

乾杯

編集:私はやっているものをもう少し詳細に説明する

だけ更新。

は以前、私は、2つのテーブルを持っていた

Carer 
    CarerID 
    UserID 
    IsPrimary 

User 
    UserID 

しかし、その後、それは介護者が複数のユーザーに属することができることを要求されたので、私は以下のように、リンクテーブルを作成する必要がありました。

UserCarer 
    UserCarerID 
    UserID 
    CarerID 
    IsPrimary 

、私は一時的にこれを解決した方法です私は何をしたくなかったし、値を取得するために別のコンテキストを初期化し、私のエンティティ内のメソッドを作成することです。

代わりに、私は私がデータを選択したとき、私は左を実行するだろうと期待していたは、このように私はselect * from Carer.*, UserCarer.IsPrimary from Carer left join UserCarer on Carer.CarerID = UserCarer.CarerID where UserCarer.UserID = @p0

すなわちCarer.IsPrimary

への参照を保持することができUserCarerテーブルからIsPrimary値を取得するために参加しますHTH

+0

@Ladislavが言ったことの上に - あなたは何か間違っているように見えますが、私は妥当な使い方を考えることができません。それはあなたが必要とする列か、そうでないかのどちらかです。もし計算されたら、linqとprojectをLadislavが言ったように使用してください。必要な場合は、その値を入力します(「デフォルト」を使用し、db側で指定する必要がある場合は計算します)。そして、インパクトが非常に低いインサート(必要でない場合)に「ヌル」のままにすることができます。つまり、私たちにもっと多くのデータを与える必要があります。 – NSGaga

+0

ありがとう@NSGaga、私はEFがそれほど簡単ではなく、左の結合からデータを返すカスタムクエリをサポートできることを期待していました。本当に、必要なのは、プロパティが結果セットに存在し、挿入または更新に含まれていない場合は、プロパティを移入するだけです。再度、感謝します。 – Gavin

答えて

0

これは、列を計算またはID(挿入時に自動生成)としてマークした場合にのみ可能ですが、別の結果があります。EFは更新または挿入後にその列を選択しようとしますあなたはまだエラーが発生します。

エンティティではないクラスを作成しようとしていて、そのようなクラスを永続化に使用できないようです。クエリにカスタム結合がある場合は、データの投影/表示を行っていることを意味し、その結果はおそらくエンティティではないため、変更の保存には使用しないでください。

+0

こんにちはLadislav、もう少し詳しくは私の最初の記事をご覧ください。うまくいけば、なぜ私がやっていることをやっているのかが説明されます。現時点では、私は問題を解決する非常に醜く非効率的な方法がありますが、私はそれを修正したいと思います。ありがとう;) – Gavin

関連する問題