Entity Framework CTP4 Code First: сопоставление защищенных свойств - PullRequest
5 голосов
/ 26 августа 2010

Я хотел бы использовать коллекцию с отложенной загрузкой для модели, но я хочу, чтобы функциональность Добавить / Удалить выполнялась отдельными методами. Так что-то вроде этого:

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 ]

1 голос
/ 05 августа 2013

Вы можете использовать статическое выражение только для чтения для доступа к защищенному свойству, как это

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();
}

И использовать его в методе OnModelCreating класса DbContext для сопоставления защищенного свойства

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany<Something>(Model.Expression);
}
0 голосов
/ 25 июня 2012

Я слышал, что это можно сделать только с помощью файла EDMX, а не кода.

0 голосов
/ 02 сентября 2010

Полагаю, если вы объявите класс конфигурации (наследующий EntityConfiguration) внутри вашего класса Model, он может работать. Это не очень хорошее решение, так как создание подклассов обычно не рекомендуется, но это единственное, о чем я могу подумать.

...