Соединение между базами данных с Linq - Обновление шаблона T4 для поддержки имени БД? - PullRequest
2 голосов
/ 28 апреля 2011

В настоящее время я работаю в многобазисной среде SQL Server и использую linq to sql для выполнения запросов.

Я использую описанный здесь подход для достижения перекрестных объединений БД: http://www.enderminh.com/blog/archive/2009/04/25/2654.aspx

так в основном:

2 контекста данных - пользователи и платежи

Users.dbo.UserDetails {PK: UserId }
Payments.dbo.CurrentPaymentMethod { PK: UserId }

Я перетаскиваю таблицы в DBML, а в окне свойств меняю источник с dbo.UserDetailsв Users.dbo.UserDetails, чтобы полностью квалифицировать имя БД.

Затем я могу выполнить одиночное кросс-соединение БД с контекстом данных, выполнив что-то вроде:

var results = (from user in datacontext.Table<UserDetail>()
        join paymentmethod in dataContext.Table<CurrentPaymentMethod>() on user.UserId equals paymentmethod.UserId
    ... rest of query here ...);

Теперь это tickety boo иработает так, как я хочу.Единственная проблема, с которой я сейчас сталкиваюсь, - это когда происходит обновление схемы и т. Д. (Что происходит довольно часто, поскольку мы находимся в фазе значительного уровня разработки).

(и, наконец, вопрос!) Чего я хочу достичь(и я пометил вопрос как T4 в качестве предположения, так как я знаю, что файлы DBML управляются T4) - это автоматический способ, когда я перетаскиваю любую таблицу в контекст данных, когда источник автоматически выбирает имя базы данных (такбудет иметь Users.dbo.UserDetails вместо просто dbo.UserDetails)?

Спасибо за любые указатели:)

Терри

1 Ответ

1 голос
/ 09 мая 2011

Посмотрите на T4 Toolbox и генератор кода LinqToSql, который он предоставляет (Предоставлено Олег Сыч ) - Вы можете настроить шаблоны для генерации ссылок так, как вам нравится,но я думаю, что проблема, с которой вы столкнетесь, заключается в том, что имя базы данных не сохраняется в файле dbml.

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

...