2012-02-26 2 views
6

エンティティ・クラスの1つは、SQLサーバー データベースにBIGINTとして格納することができます。私の質問は、Entity Framework コンテキストを取得して、エンティティクラスのインスタンスを格納および取得する方法を知るにはどうすればよいですか?エンティティ・フレームワークにカスタム・タイプのインスタンスを保存する方法(スカラーとして格納できる)

詳細をご覧ください。私はNoda Timeを使用しています。これは、 の(より多くの)幅広い範囲をSQLまたは.NETのdatetimeよりも(そしてそれはデザートのトッピングである)表示することができます。 My Entity Class、Happeningは、NodaTimeの インスタントクラスのラッパーです。私は長いことからハプニングを設定し、 から.SetFromLong(長いインスタント)や.ToLong()のようなメソッドを使って長いことを得ることができます。

現在、私は、ドットネットDateTime型の プロパティを含むクラスを保存しています。代わりに、自分のカスタムタイプの「012ening」というプロパティーを使用したい場合、それらを保存する方法をEntity Frameworkに伝えるにはどうすればいいですか?

モデリングとマッピングについて私がこの記事を読んでいるのであれば、私は 右のトラックにあるのですか?

http://msdn.microsoft.com/en-us/library/bb896343.aspx

私は、エンティティフレームワーク4

+0

重複NodaTime経由クラスでそれにアクセスすることができます。http://stackoverflow.com/questions/5820915/entity-framework-custom-data-type-mapping –

答えて

6

を使用しています何私はあなたのエンティティNodaTimeと長い上2つのプロパティを追加してやって、そしてあなたのEFで[NotMapped]使用してNodaTimeプロパティを除外をお勧めしますあなたのgetter/setterでlongを更新してください。

public class MyEntity{ 
    public long TimeAsLong{get;set;} 
    [NotMapped] 
    public Happening { 
     get{ 
     return new Happening().SetFromLong(TimeAsLong); 
     } 
     set { 
     TimeAsLong = value.ToLong(); 
     } 
    } 
} 

すなわち、この効果は長くはDBに格納されていることになりますが、あなたは

+1

うまくいきました。ありがとうございました。私はTimeAsLongの必要はありませんが、EFを受け入れることを除いて、それはずっと上がっていますか(あなたの経験では)あなたはそれらのメンバーを明確に名づけようとしますか、TimeAsLongForEF、それに何か? –

+0

ストレージとプレゼンテーションに関するすべてのこと、時にはそれを使いたいとは違うものを保存する方が効率的です。実際には、私はこれを行う必要がある場所のアイブのヒープはありませんが、それは時折発生します、別の例のiveは、データベース内の単一の文字を格納していることが判明しましたあなたの書き込みモデルの文字列に変換する必要があります(EF doesnt varchar [1]とvarchar [2]はどちらも文字列です)。個人的に私はEFとしてフィールドにラベルを付けることはしませんが、それはただ好みのことです。 –

+0

また、EFはプロパティが公開されているかどうかは気にしません(コードファーストを使用した場合)。たとえそれがプライベートであっても、それをマッピングするための方法はまだ必要ですが。私たちがやったことは、EF構成クラスをエンティティクラスに置き、プライベートフィールドにもアクセスしてマッピングを実行できるようにすることです。欠点は、問題があるかもしれないし、そうでないかもしれないエンティティのマッピングクラスを持っていることです。 –

関連する問題