实体框架CTP4代码优先:映射受保护的属性

时间:2010-08-26 17:45:38

标签: c# entity-framework-4 code-first

我想在模型上使用延迟加载集合,但我希望通过单独的方法完成添加/删除功能。所以像这样:

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。但由于该属性受到保护,我无法弄清楚如何在其上设置配置。有没有办法完成我在这里要做的事情?

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我想如果你在Model类中声明配置类(继承EntityConfiguration),它可以工作。这不是一个好的解决方案,因为通常不鼓励进行子类化,但这是我唯一能想到的。

答案 2 :(得分:0)

我听说过这只能用EDMX文件方式完成..不是代码优先。