Как вы переименовываете имя LINQ, когда таблицы связаны с самими собой? - PullRequest
1 голос
/ 11 ноября 2011

Предположим, у меня есть таблица Person, которая выглядит следующим образом, где fk_FriendID связан с pk_PersonID:

enter image description here

LINQ2SQL автоматически отобразит это как:

Person bert = new Person();
Person ernie = new Person();

bert.Person1 = ernie;

Как переписать эту функцию, чтобы я мог ссылаться на нее как bert.Friend = ernie?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Из примера на http://msdn.microsoft.com/en-us/library/bb386950.aspx похоже, что вы хотите сделать это:

private EntitySet<Person> _Friends;
[Association(Storage = "_Friends", OtherKey = "PersonID")]
public EntitySet<Person> Friends
{
    get { return this._Friends; }
    set { this._Friends.Assign(value); }
}

EDIT:

Чтобы добраться до этого через файл .dbml, используйте инструкции на http://msdn.microsoft.com/en-us/library/bb546179.aspx

Модификация, которую вы должны внести, как вы, вероятно, можете догадаться, заключается в поиске «Person1» и замене его на «Friend» или «Friends» в зависимости от ситуации.

1 голос
/ 11 ноября 2011

Не самое чистое решение, но вы можете добавить дополнительное свойство через частичный класс:

partial class Person
{
   public Person Friend
   {
      get { return this.Person1; }
      set { this.Person1 = value; }
   }
}

Это также моя стандартная процедура для размещения строго типизированных свойств перечисления над числовыми полями.

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

Вариант - начать использовать EF (я думаю, что они там решили эту проблему), но это все равно, что пытаться лечить зуд на руке, смахивая его дробовиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...