Linq2Sql: как обрабатывать таблицы с одинаковыми именами и разными именами схем - PullRequest
3 голосов
/ 07 августа 2009

У меня есть база данных с несколькими таблицами, которые имеют одно и то же имя, но из разных схем. Например:

[DatabaseName].[Schema1].[MyTable]
[DatabaseName].[Schema2].[MyTable]

Когда Linq2Sql генерирует код для этой базы данных, он просто выбирает таблицу из первой схемы и полностью игнорирует вторую схему:

[Table(Name="[Schema1].MyTable")]
public partial class MyTable {  }

Это фактически делает невозможным запрос таблицы к второй схеме с использованием Linq2Sql. Есть ли обходной путь для этого?

Моя первая идея - вручную отредактировать сгенерированный код, чтобы у меня было:

[Table(Name="[Schema1].MyTable")]
public partial class Schema1MyTable {  }

[Table(Name="[Schema2].MyTable")]
public partial class Schema2MyTable {  }

но поддерживать этот код каждый раз, когда база данных меняется, было бы огромной болью. Есть еще идеи?

1 Ответ

1 голос
/ 30 декабря 2010

Похоже, что это больше не проблема в Visual Studio 2010. Я создал две таблицы с именами target и привязал одну к схеме a , а другую - к схема b . Я добавил DBML и перетащил обе таблицы целей (одна отображается как target (a) , а другая target (b) в обозревателе сервера) в конструкторе. Это создало один класс с именем target и другой класс с именем target 1 . Сгенерированный код (отредактированный для ясности) показывает, что инструмент теперь генерирует классы, очень похожие на приведенный выше пример кода:

[global::System.Data.Linq.Mapping.TableAttribute(Name="a.target")]
public partial class target
{ //... class implementation snipped
}

[global::System.Data.Linq.Mapping.TableAttribute(Name="b.target")]
public partial class target1
{ // ... class implementation snipped
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...