Я искал аналогичную тему для моего вопроса в Интернете за последние несколько дней. Я, наконец, прибег к самому заданию этого вопроса.
Используя методологию кода и EF 4.3.1, я создал класс контекста, классы сущностей и классы для хранения вывода хранимой процедуры. Класс контекста имеет методы, которые выполняют определенные хранимые процедуры с помощью SqlQuery<T>
.
Пример:
public IEnumerable<Results> GetData(int id)
{
var parameters = new SqlParameter[] { new SqlParameter("@id", id) };
var result = this.Database.SqlQuery<Result>("Exec dbo.sproc_GetData @id", parameters);
var data= result.ToList<Result>();
return data;
}
Как я отслеживаю свою отладку, мои данные возвращаются, а данные сопоставляются свойствам с соответствующим именем. Однако на выходе есть столбец с "/"
в имени (пример: Info/Data
). Очевидно, я не могу назвать такое свойство, поэтому я решил, что могу отобразить вывод с использованием атрибута column ([Column("Info/Data")]
):
[Column("Info/Data")]
public string InfoData
{
get { return infoData; }
set { infoData= value; }
}
Я даже попытался использовать оператор verbatim ([Column(@"Info/Data")]
), обернув текст []
([Column("[Info/Data]")]
), и я попробовал оба ([Column(@"[Info/Data]")]
). При переходе по коду я вижу, что свойства с соответствующими именами столбцов назначены, но свойства с атрибутом столбца игнорируются и переходят во время назначения.
Я также попробовал fluent-api для каждого столбца для объекта.
modelBuilder.ComplexType<Result>().Property(d => d.InfoData).HasColumnName("Info/Data");
но это вызывает следующее исключение:
Считыватель данных несовместим с указанным "NameSpace.Result". Элемент типа "InfoData" не имеет соответствующего столбца в устройстве чтения данных с тем же именем.
В моем проекте NameSpace.Result
есть класс (имя изменено для безопасности), а InfoDatais
- это свойство, которое я пытаюсь сопоставить с помощью fluent-api (соответствующий столбец sql имеет a/in; ex: Info/Data).
Кто-нибудь сталкивался с этой проблемой?
Если моя проблема неясна или ее попросили, пожалуйста, дайте мне знать.