У меня есть запрос, который извлекает три столбца из таблицы - ID, EMAIL_ID_NUMBER и MESSAGE_SUBJECT.Я хочу сопоставить эти три столбца со свойствами идентификатора объекта, EMAIL_ID_NUMBER и MessageSubject (имена выбраны, чтобы выделить проблему).Проблема в том, что сопоставление не работает так, как я ожидаю.
Я ожидаю, что когда я укажу Column (Name = "COLUMN1") рядом с некоторым свойством, тогда значение COLUMN1 будет сохранено в этом свойстве.,Однако это не работает.Значение сохраняется только тогда, когда имя свойства точно совпадает с именем столбца.Например, в этом случае ...
[Column(Name = "MESSAGE_SUBJECT")]
public String MessageSubject;
... Я ожидаю, что столбец MESSAGE_SUBJECT из запроса заполнит свойство MessageSubject.Однако этого не происходит.Вопрос в том, как мне это сделать?
Другие свойства заполняются без проблем, так как их имена совпадают с именами столбцов в запросе.
Код ниже
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Text;
using System.Threading.Tasks;
namespace LinqExample1
{
class Record1
{
[Column(CanBeNull = false, IsPrimaryKey = true)]
public int ID;
[Column()]
public String EMAIL_ID_NUMBER;
[Column(Name = "MESSAGE_SUBJECT")]
public String MessageSubject;
public override string ToString()
{
return $"{base.ToString()}. ID={ID}. Name={EMAIL_ID_NUMBER}. MessageSubject={MessageSubject}";
}
}
class Program
{
static void Main(string[] args)
{
var context = new DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["LinqExample1.Properties.Settings.MyConnectionString"].ToString());
var emailTemplates = context.ExecuteQuery<Record1>("select ID, EMAIL_ID_NUMBER, MESSAGE_SUBJECT from EMAIL_NOTIFICATIONS");
foreach (Record1 emailTemplate in emailTemplates)
{
Console.WriteLine(emailTemplate.ToString());
}
}
}
}
Вывод, который я получаю, выглядит следующим образом:
LinqExample1.Record1. ID=4. Name=EM 05. MessageSubject=
LinqExample1.Record1. ID=16. Name=EM 06. MessageSubject=
LinqExample1.Record1. ID=17. Name=EM 07. MessageSubject=
Например, MessageSubject всегда пуст, даже если базовый запрос возвращает данные для столбца MESSAGE_SUBJECT.
Существуетпара потенциальных решений, которые мне не нравятся.
- Сделайте имена свойств такими же, как имена столбцов.Например, класс Record1 будет иметь свойства ID, EMAIL_ID_NUMBER и MESSAGE_SUBJECT.
- Использовать псевдонимы столбцов в запросе для сопоставления имен свойств.Например, используйте запрос «выберите идентификатор, имя EMAIL_ID_NUMBER, MESSAGE_SUBJECT MessageSubject из EMAIL_NOTIFICATIONS» и имена свойств записи Record1, имя и имя сообщения.