Как добавить вычисляемый столбец в модель в dbml

#.net #linq-to-sql #rdlc #calculated-columns

#.net #linq-to-sql #rdlc #вычисляемые столбцы

Вопрос:

Как добавить вычисляемый столбец в класс модели.

У меня есть две модели,

  1. User
  2. City

User связан City с CityID (FK contraint) и CityName находится в City модели

Я хотел, чтобы вычисляемый столбец был в User модели, потому что отчет .rdlc, похоже, не получает значения из City модели, к которой подключен User (в dbml).

В настоящее время, когда я добавляю новое свойство в модель, оно выдает ошибку при выполнении запроса linq с использованием этой модели.

Недопустимое имя столбца ‘UserCityName’

это означает, что он пытается выбрать CityName User из базы данных.

Спасибо.

Ответ №1:

LinqToSql генерирует сущность как частичный класс, поэтому вы можете добавить дополнительный столбец к своей сущности, добавив новый класс и добавив следующий код.

Пример:

 namespace YourEntityNameSpace
{
    public partial class User
    {
        public string UserAdditionalText
        { 
            get
            {
                // your code goes here
            }
        }
    }
}
 

Обновить:

  1. Разверните Model.dbml окно вашего решения, вы найдете Model.dbml.layout и Model.designer.cs .
  2. Откройте Model.designer.cs , он содержит автоматически сгенерированный класс из вашей базы данных
  3. Поиск текста public partial class User . Теперь вы можете видеть, что автоматически сгенерированный класс является частичным классом, что означает, что вы можете определить свой класс в отдельном файле. Подробнее
  4. Добавьте новый класс в свой проект, используйте то же пространство имен и имя класса, что и в вашем автоматически сгенерированном файле.
  5. Добавьте дополнительное свойство в класс User, вы сможете получить доступ ко всем свойствам и элементам внутри автоматически сгенерированного класса.

Комментарии:

1. Я создаю модель из конструктора dbml, а файл dbml содержит автоматически сгенерированные классы моделей, изменения, сделанные вручную в классе модели, не будут потеряны, когда в будущем я буду вносить изменения из конструктора dbml?

2. Конечно, вы можете посмотреть на автоматически сгенерированный класс модели, он частичный. Что вам нужно сделать, это добавить новый класс в свой проект, а затем изменить его пространство имен на пространство имен вашей модели ( YourEntityNameSpace в моем ответе).

3. Итак, вы имеете в виду создать отдельный класс User в другом пространстве имен?

4. Что? Я имею в виду, что вы можете добавить новый файл в свой проект, использовать то же пространство имен и то же имя класса. Вам также необходимо добавить ключевое слово partial к классу в новом файле. Я просто обновляю свой ответ, и внутри него есть ссылка на частичный класс. 🙂

5. Да, я все равно знал о частичных классах. Спасибо, это работает. : D