2016-07-18 9 views
0

フロントエンドに表示されているビジネスレイヤからEFエンティティオブジェクトを戻す既存のアプリケーションを変更するよう依頼されました。いくつかの場所には、OfficeCodeがデータベースに文字列として記録されているレコードがあります。フロントエンドでこれらのレコードの一部のOfficeNameを表示するように求められました。以下は、これらのモデルのスニペットです。エンティティコードの最初のプロパティを別のテーブルにマッピングする

public class Office 
{ 
    [Key] 
    public string OfficeCode { get; set; } 

    public string OfficeName { get; set; } 

    // Many more properties 
} 

public class Note 
{ 
    [Key] 
    public int Id { get; set; } 

    public string OfficeCode { get; set; } // Not a ForeignKey, I didn't create the database 

    public string OfficeName { get; set; } // Can we pull this from the Office table? 
} 

彼らは同じではないので、「オフィス」私はエンティティ分割を使用することができるかもしれないと思ったが、私はエラーメッセージ

エンティティタイプ「オフィス」と「注意」は、テーブルを共有することはできません取得それらの間で一致する主キーとの有効な1対1の外部キー関係を持っていません。

テーブル間にForeignKey関係がない場合、別のテーブルのプロパティを設定する方法はありますか?

誰かが、スタックを大量に再発行せずにNotesにOfficeNameを表示するための洗練された方法を考えることができますか。

答えて

0

EFのインターセプタの概念を使用できます。 IDbCommandInterceptorを使用すると、実行後に結果を実行および変更する前にSQL文を変更できます。

あなたが(オフィスからどこNote.OfficeCode = Office.OfficeCode ....)あなたのインターセプタにパラメータ(OfficeCode)を通過し、その後、手動でSQLクエリを変更する必要が

http://xabikos.com/2014/11/18/Create-a-multitenant-application-with-Entity-Framework-Code-First-Part-2/

私がやりますなぜあなたのライブを難しくしようとしているのか、あなたはEFがあなたのデータ定義を気に入っていないことに気付きました。複雑なタイプを使用するか、TPHと両方のエンティティが同じベースカラムを共有します。もっと簡単に。

+0

私は自分の人生を困難にしようとしていない、私は既存のアプリケーションに直面している。通常はIQueriableからDTOオブジェクトを選択しますが、Entityオブジェクトを水和することはありません。私はちょうどノートとオフィスの関係を作成し、Officeを含めることができますが、私は1つの名前プロパティのために、それぞれのノートにすべて40のプロパティ、複雑なOfficeオブジェクトを添付します。 –

関連する問題