5

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

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。但是由于该属性受到保护,我无法弄清楚如何对其进行配置。有什么办法可以完成我在这里尝试做的事情吗?

4

3 回答 3

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);
}
于 2013-08-05T07:50:28.070 回答
0

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

于 2010-09-02T14:10:39.197 回答
0

我听说这只能使用 EDMX 文件方式来完成。而不是先编码。

于 2012-06-25T03:57:22.513 回答