簡體   English   中英

實體框架,POCO和私有財產

[英]Entity framework, POCO and a private property

我創建了以下POCO類,並將Contact.FirstNameContact.LastName屬性設為私有(這些屬性映射到Entity Framework模型中的相應屬性)。

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

我期望得到一個例外,因為EF無法為這兩個屬性賦值,但不知何故EF仍設法為它們賦值。 這怎么可能,因為只有Contact類中的代碼才能訪問私有屬性?

謝謝

在具有足夠信任級別的環境中,可以使用反射來訪問通常無法訪問的成員。

為了完整起見:EF5代碼首先不(至少默認情況下)將私有屬性映射到數據庫表列。

以下課程:

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

使用以下DbContext:

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

生成只有一列的People表: dbo.People.PersonId (PK, int, not null)

默認代碼優先約定需要公鑰屬性。 如果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.

是的 - EF,代碼首先在幾個地方使用它。

我已經看到了私有構造函數的類似行為 - 即使你'隱藏'它,或者嘗試:),EF / CF仍然可以構造你的對象(這是早期版本中的行為,現在還不確定)。

我記得和CF人討論過為什么他們沒有初始化復雜類型的屬性 - 他們仍然可以訪問私有成員(如果我沒記錯的話),很久以前。

所以,這是一個普遍的問題 - 但在這個意義上希望這至少可以澄清一些問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM