2012-04-12 7 views
8

次のPOCOクラスを作成しました。Contact.FirstNameおよびContact.LastNameプロパティをプライベートにしました(これらのプロパティは、Entity Frameworkモデルの適切なプロパティにマップされています)。エンティティフレームワーク、POCOおよびプライベートプロパティ

public class Contact 
{ 
    public int ContactID { get; set; } 
    private string FirstName { get; set; } 
    public string LastName { get; private set; } 
} 

私はEFによる例外は、これら2つのプロパティに値を割り当てることができない得るために期待、何とかEFはまだそれらに値を割り当てることができました。 Contactクラスのコードだけがプライベートプロパティにアクセスする必要があるので、どうすれば可能ですか?

は信頼の十分なレベルでの環境では、あなた

+31

Entity Frameworkのは魔法です。それは何でも望むことができます。 –

+0

マッピングコードはありますか?明示的な設定(またはEF 4.3のアノテーション)なしでプライベートプロパティをマッピングすると、実際には簡単には機能しません。http://blog.oneunicorn.com/2012/03/26/code-first-data-annotations-on-non-public-/ – Slauma

+0

@Slauma:私はデータベースの最初のアプローチを使用しています – user702769

答えて

16

ありがとう、reflectionは、一つには、通常のアクセス権を持っていないためにどのメンバーにアクセスするために使用することができます。

+0

これはテストプロジェクトがプライベートメンバーにアクセスできる方法ですか? – McGarnagle

+2

@dbaseman:はい、しかし、 'internalsVisibleAttribute'もあります。これはテスト中のコードで時には' internal'メンバをユニットテストにアクセスできるようにするために使用されることがあります。 –

+0

あなたの助けを借りてありがとうございます – user702769

0

はい - EFでは、最初にコードをカップルの場所で利用しています。

プライベートコンストラクタと同様の動作を見たことがあります - EF/CFは、オブジェクトを非表示にしたり、試してもオブジェクトを構築できます(以前のバージョンではこれが動作していました。 。

私はCFの人々と複雑な型のプロパティを初期化しない理由について議論していることを覚えています.-私が正しく思い出しても、まだプライベートメンバーにアクセスしてもOKです。

これは一般的な質問のビットですが、その意味では、これが少なくとも何かを明確にすることを願っています。

1

完全性のために:EF5コードは最初にプライベートプロパティをデータベーステーブルの列にマッピングしません(少なくともデフォルトでは)。

次のクラス:以下DbContextと

public class Person { 
    public int PersonId { get; set; } 
    private string Name { get; set; } 
} 

:公開キープロパティは、デフォルトのコードで必要とされるdbo.People.PersonId (PK, int, not null)

public class PrivatePropertiesContext : DbContext { 
    public DbSet<Person> People { 
    get; 
    set; 
    } 
} 

は1列のみを持つ人々のテーブルを生成します最初の慣習。 PersonクラスでPersonId宿泊施設には、プライベートまたは保護される場合は、エンティティフレームワークは、以下の例外がスローされます。

System.Data.Entity.Edm.EdmEntityType: : EntityType 'Person' has no key defined. Define the key for this EntityType. 
System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'People' is based on type 'Person' that has no keys defined. 
関連する問題