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

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。但是由于该属性是 protected ,所以我不知道如何在其上设置配置。有什么方法可以完成我在这里要做的事情吗?

最佳答案

您可以使用只读静态表达式来访问 protected 属性,如下所示

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 属性
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression);
}

关于c# - Entity Framework CTP4代码优先: Mapping protected properties,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3577891/

10-13 07:09