簡體   English   中英

代碼第一個自動代理類導航和集合屬性為null

[英]code first auto gen proxy class navigation and collection properties are null

對於我的所有POCO,導航和集合屬性都是null。

讓我提供一些背景知識。 我有一個使用EF 4.3.1的復雜代碼第一個項目。 代理生成已禁用。 手動管理集合和導航屬性。

我現在正在啟用代理創建和延遲加載。 在調試時,我可以看到我的實體(轉換為我已知的POCO類型)現在實際上是一個自動生成的代理類。 到現在為止還挺好。

現在,當我查看我的導航屬性時,它們為空。 同樣,我的集合屬性為null。

使用反射,我可以看到代理類HAS重寫了我的導航和集合屬性。

所有導航和集合屬性都是虛擬的。 例如:

public virtual NavigationType NavigationName { get; set; }
public virtual ICollection<CollectionType> CollectionName { get; set; }

此外,所有表都初始化為:

modelBuilder.Entity<TEntity>()
.Map(m =>
{
    m.MapInheritedProperties();
    m.ToTable("TableName");
});

我還可以確認數據庫是按預期生成的。 外鍵都存在並與預期字段相關聯。

為什么他們是空的? 我該如何進一步診斷?

我該如何進一步診斷?

例如,您可以通過查看更改跟蹤器的context.ChangeTracker.Entries()集合來檢查您正在檢查的實體是否附加到上下文。

您很可能擁有一個動態代理,其所有導航屬性都為null ,例如:

Entity entity = context.Entities.Create();

entity將是一個代理,但NavigationNameCollectionName將為null ,即使您訪問這些屬性它們也會保持為null (導致NullReferenceException )。 這只會在您附加實體時更改:

context.Entities.Attach(entity);

如果您現在訪問屬性,則應運行延遲加載。 如果數據庫中沒有相關實體, NavigationName 可以保持為null ,但在附加和訪問集合后, CollectionName永遠不應為null 如果數據庫中沒有相關實體,則結果應為空集合,但不為null

暫無
暫無

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

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