Объект считается неизменным , если его состояние не может измениться после его создания. Максимальная опора на неизменяемые объекты широко признана в качестве разумной стратегии для создания простого и надежного кода.
Неизменяемые объекты особенно полезны в параллельных приложениях. Так как они не могут изменить состояние, они не могут быть повреждены из-за интерференции потоков или обнаружены в несовместимом состоянии.
Мне нравится эта фраза из поста
Неизменяемые объекты облегчают программирование параллелизма
Единственное подозрительное, что я могу заметить, это - здесь, в заявлении, вы:
public ISingleResult<spXResult> spX([Parameter(DbType="VarChar(8000)")] string str)
(DbType = VARCHAR (8000)) - это ANSI (не Unicode), но затем в объявлении столбца вы используете NTEXT - в первую очередь, это UNICODE (2 байта на символ), а почему NTEXT ?? Выше у вас VARCHAR?
[Column(Name="[XML_F52E2B61-18A1-11d1-B105-00805F49916B]",
Storage="_XML_F52E2B61_18A1_11d1_B105_00805F49916B",
DbType="NText", UpdateCheck=UpdateCheck.Never)]
Это кажется немного странным .......
Вы можете попытаться сделать так, чтобы в обоих местах было одинаково? Например, VARCHAR (8000) в обоих случаях ??
Marc
Просто измените свой sp с
SELECT ...
FROM MyTable
FOR XML AUTO
на
DECLARE @ResultXML xml
SET @ResultXML =
(SELECT ...
FROM MyTable
FOR XML AUTO)
SELECT @ResultXML as [MyXML]
и воссоздайте метод linq