2016-06-10 4 views
0

Я перерабатываю приложение, в котором ранее работал код. По необходимости я перемещаю несколько часто используемых битов в отдельный проект. Одна из них - модель Linq to SQL.Связанная таблица Linq to SQL не поддерживается

У меня есть все ссылки разрешены, и все пространства имен скорректированы так, чтобы все правильно компилировало EXCEPT для нескольких областей, где код использует ассоциацию сопоставления для доступа к другой таблице.

Так, например,

Template t = db.Templates.FirstOrDefault(f => f.TemplateId == templateId); 
    List<Item> templateList = new List<Item>(); 
    foreach (var r in globalItems) 
    { 
     if (t.TemplateChildren.FirstOrDefault(f => f.ItemId == r.ItemId) != null) 
      // do some stuff... 
    } 

В данном случае, я не могу получить доступ к t..TemplateChildren. Компилятор говорит мне, что недоступен из-за его уровня защиты.

Взглянув на Linq для SQL Designer кода, я нашел проблему:

 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Template_TemplateChildren", Storage="_TemplateChildren", ThisKey="TemplateId", OtherKey="TemplateId")] 
    internal EntitySet<TemplateChildren> TemplateChildren 
    { 
     get 
     { 
      return this._TemplateChildren; 
     } 
     set 
     { 
      this._TemplateChildren.Assign(value); 
     } 
    } 

Обратите внимание, что EntitySet был украшен «внутренний». Если я изменю это на «общедоступный», код будет компилироваться в порядке. Но, конечно, любое изменение модели снова сломает его, потому что это код, сгенерированный с помощью инструмента.

Это работало, когда модель была в том же проекте, что и код, который он называет, и я проверил и дважды проверил, что все настроено на PUBLIC в самой модели, но генератор кода настаивает на создании этого сопоставления ВНУТРЕННЯЯ.

У кого-нибудь есть мысли о том, почему это работает именно так, или как я могу обмануть генератор кода, превратив его в PUBLIC?

ответ

0

ответил на мой собственный вопрос:

Откройте модель и нажмите на стрелку, отношения существа проблемы. В области свойств разверните по мере необходимости «дочернее свойство» или «родительское свойство» и измените модификатор доступа.

Смежные вопросы