10

これまでエンティティフレームワークを使用したことはありませんでした。エンティティフレームワークとビジネスオブジェクト

エンティティをプレゼンテーションレイヤーに公開することができます。 しかし、私は特定のフィールドを公開しないようにしました。変更された日付や作成された日付などのフィールドやその他のさまざまなデータベースフィールドがあります。

ビジネスオブジェクトを実装して、必要なプロパティを公開するだけで、オブジェクトをシリアライズ可能に保つことはできますか?

これはLinqToSqlと比べてどのような利点がありますか?あなただけがプレゼンテーション層に必要なプロパティをバインドし、これはオブジェクトの抽象化のそれ自身のレベルを宣言、ビジネスロジック層(を介して行うことができます

答えて

22

EDMXモデルでエンティティを定義する場合、各プロパティのセッターとゲッターの可視性を指定することができます。そのため、ModifiedDateを他のレイヤーで表示したくない場合は、単純にinternalとして指定できます。

enter image description here

要件は、ModifiedDateのような、より複雑である場合にはアセンブリエンティティとビジネスロジックアセンブリにアクセスできるが、UIアセンブリに、あなたはの間で交換される別のオブジェクトを作成する必要はありませんビジネスロジックとUIロジックレイヤーが含まれています。

+0

小さなコードサンプルはどうですか? –

+0

@ロバーツ:どのようなサンプルを期待していますか? –

+0

各プロパティのゲッターとセッターの可視性をどのように指定しますか? –

1

)またはViewModel。

+0

どのように? –

+0

ええ。私はこれの小さな例に見えるのが好きです。 – BastanteCaro

3

個人的にはエンティティよりもラッパークラスを使用して、必要なものを公開したり隠したりします。

// instead of below property in your BLL: 

private int m_someVariable; 

public int SomeVariable 
{ 
    get { return m_someVariable; } 
    set { m_someVariable = value; } 
} 

// You can use the entity object: 

private readonly EntityClass _entityObject = new EntityClass(); 

public int SomeVariable 
{ 
    get { return _entityObject.SomeVariable; } 
    set { _entityObject.SomeVariable = value; } 
} 

// or make it read-only at your BLL 

public int SomeVariable 
{ 
    get { return entityObject.SomeVariable; } 
    // set { entityObject.SomeVariable = value; } 
} 
+1

これは私が探していたもののように聞こえる。これは簡単にシリアル化できますか? – BastanteCaro

+0

はい、 'BLL'クラスを' serializable'とマークしてルールに従ってください。私はこの解決策を考えていましたが、これは私のために働いていました。私はこれを独立型プロジェクトで宣言し、エンティティプロジェクトに 'partial class'を追加しないことができます(私の場合、2つの異なるチームがそれぞれのプロジェクトで作業していました)。 2つのコンストラクタを作成する、1つはパラメータなし、もう1つはエンティティオブジェクトを受け入れるというような、このソリューションに関するいくつかのトリックがあります。 – Xaqron

1
 // this is your edmx 
     Asset5Entities conx = new Asset5Entities(); 

//これは、データベース内のテーブルで連絡先の新しいオブジェクトリストで考える // uが処理するためには、このデータベース・テーブルは、オブジェクトにマッピングされたエンティティフレームワークを使用して

  List$gt;Contact$lt; s = new List$gt;Contact$lt;(); 
uは今ここに

01を選択するか、UR、データベース内の任意のテーブルの上にクエリおよびuは、そのテーブルの一例(メール)内の列へ //アクセスすることができますLINQの大きなを使用して

//小さなコードサンプルについて

//ではなく

 string sqlcommand = "select email from Contacts"; 
     Contact con = new Contact(); 
     con.Email= "[email protected]"; 
     con.FirstName="nader"; 

     //etc etc... 



     conx.Contacts.AddObject(con); 

     //rather than " insert into Contact values ......................" 

     //having your queries within ur c# code rather than strings that are not parsed //for errors but on runtime was alot helpful for me 
関連する問題