#.net #linq-to-sql #rdlc #calculated-columns
#.net #linq-to-sql #rdlc #вычисляемые столбцы
Вопрос:
Как добавить вычисляемый столбец в класс модели.
У меня есть две модели,
User
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
}
}
}
}
Обновить:
- Разверните
Model.dbml
окно вашего решения, вы найдетеModel.dbml.layout
иModel.designer.cs
. - Откройте
Model.designer.cs
, он содержит автоматически сгенерированный класс из вашей базы данных - Поиск текста
public partial class User
. Теперь вы можете видеть, что автоматически сгенерированный класс является частичным классом, что означает, что вы можете определить свой класс в отдельном файле. Подробнее - Добавьте новый класс в свой проект, используйте то же пространство имен и имя класса, что и в вашем автоматически сгенерированном файле.
- Добавьте дополнительное свойство в класс User, вы сможете получить доступ ко всем свойствам и элементам внутри автоматически сгенерированного класса.
Комментарии:
1. Я создаю модель из конструктора dbml, а файл dbml содержит автоматически сгенерированные классы моделей, изменения, сделанные вручную в классе модели, не будут потеряны, когда в будущем я буду вносить изменения из конструктора dbml?
2. Конечно, вы можете посмотреть на автоматически сгенерированный класс модели, он частичный. Что вам нужно сделать, это добавить новый класс в свой проект, а затем изменить его пространство имен на пространство имен вашей модели (
YourEntityNameSpace
в моем ответе).3. Итак, вы имеете в виду создать отдельный класс
User
в другом пространстве имен?4. Что? Я имею в виду, что вы можете добавить новый файл в свой проект, использовать то же пространство имен и то же имя класса. Вам также необходимо добавить ключевое слово partial к классу в новом файле. Я просто обновляю свой ответ, и внутри него есть ссылка на частичный класс. 🙂
5. Да, я все равно знал о частичных классах. Спасибо, это работает. : D