2010-08-26 48 views
5

我想在模型上使用延遲加載集合,但我希望通過單獨的方法完成添加/刪除功能。所以這樣的事情:實體框架CTP4代碼優先:映射受保護的屬性

class Model 
{ 
    protected virtual ICollection<Something> _somethings { get; set; } 

    public IEnumerable<Something> Somethings 
    { 
    get { return _somethings; } 
    } 

    public void AddSomething(Something thingToAdd) 
    { 
    /* logic */ 
    _somethings.Add(thingToAdd); 
    } 
} 

我想不出如何配置這個映射。我看着使用配置類:EntityConfiguration。但由於該屬性是受保護的,我無法弄清楚如何在其上設置配置。有什麼方法可以完成我在這裏要做的事情嗎?

+0

會像一個倉庫的工作? – 2010-08-26 17:51:28

+0

我想你有類似我的問題:http://stackoverflow.com/questions/3574333/ef-4-0-mapping-to-readonly-property-with-private-field – 2010-08-26 22:04:51

回答

0

我想如果你聲明模型類中的配置類(繼承EntityConfiguration),它可以工作。這不是一個好的解決方案,因爲子類化通常是令人沮喪的,但它是我能想到的唯一的東西。

0

我聽說這隻能使用EDMX文件的方式..不代碼第一。

1

您可以使用只讀的靜態表達對訪問受保護的財產這樣

protected virtual ICollection<Something> _somesing { get; set; } 
public static readonly Expression<Func<Model, ICollection<Something>>> Expression = p => p._something; 

public IReadOnlyCollection<Something> Something 
{ 
    return _sumething.AsReadOnly(); 
} 

而在的DbContext類用它OnModelCreating方法映射保護財產

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression); 
} 
相關問題