так что же такое «это»? Почему «это» не является lvalue?

Предположим, что объект

class A {
public :  void Silly(){
    this = 0x12341234;
}

Я знаю, что получу ошибку компилятора '«this» не является lvalue'. Но и тогда это не временное явление. Так что же такое гипотетическое объявление «это»?

Компилятор: GCC 4.2 компилятор на mac.

-121--1746106- Исключение SQL для рамки сущностей: предоставленное значение не является допустимым экземпляром типа данных float У меня есть приложение, использующее рамку сущностей с базой данных SQL Server 2008 (Express). Я получаю прерывистую ошибку при обновлении сущности в базе данных, которая указывает, что "...

У меня есть приложение, использующее Рамка с базой данных SQL Server 2008 (Express). Я получаю прерывистую ошибку при обновлении сущности в базе данных, которая указывает, что «предоставленное значение не является допустимым экземпляром типа данных float». Однако, как я могу сказать, значения, которые он устанавливает, всегда будут плавающими. Они отливаются из целых чисел, но даже все равно всегда будут давать поплавки. Если бы коду удалось каким-то образом создать недопустимый float, я бы подумал, что .NET пожалуется на него, прежде чем он даже попадет в SQL Server.

Я включил полное исключение, извлечения кода и схему ниже.

Есть ли что-то, чего я мог бы здесь не упустить - например, можно ли считать одно значение плавающим в .NET, но не в SQL Server? Кроме того, есть ли способ программного регистрации точности и масштаба поплавка, чтобы я мог диагностировать, что происходит, если проблема возникает снова?

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

Ошибка:

System.Data. Дополнительные сведения см. во внутреннем исключении. --- >

System.Data.SqlClient.SqlException: Неверный поток протокола удаленного вызова процедур (RPC) входящего потока табличных данных (TDS). Параметр 4 («@ 1»): предоставленное значение не является допустимым экземпляром типа данных float. Проверьте исходные данные на наличие недопустимых значений. Примером недопустимого значения являются данные числового типа с масштабом, превышающим точность.

  в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое подключение)
в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое подключение)
в System.Data.SqlClient.TdsParser.ThrowExcepureAndWarning ()
в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkGroupSimpleResultSet bulkGroupHandler, TdsParserStateObject ateObj)
в System.Data.SqlClient.SqlCommand.FinishExecureReader (SqlDataReader ds, RunBehavior, String resetOptions String)
в System.Data.SqlClient.SqlCommand.RunExecureReireTds (командный командный код поведения, RunBehavior runBehavior, Boolean returnStream, логический асинхронный)
в System.Data.SqlClient.SqlCommand.RunExecureReader (cmdBehavior, runBehavior, Boolean returnStream, метод String, результат DbAsyncResult)
в Системе. Данные. SqlClient. SqlCommand. InternalExecuteNonQuery (результат DbAsyncResult, Последовательность methodName, Булев sendToPipe)
в System.Data.SqlClient.SqlCommand.ExecureNonQuery ()
в System.Data.Mapping.Update.Internal.DynamicStartCommand.Execute (транслятор, подключение EntityConnection, словарь «» 2 identificalValues «», список «» 1 generityValues «»)
в System.Data.Mapping.Update.Internal.StartTranslator.Update (Диспетчер stateManager, адаптер IEntityAdapter)
--- Конец трассировки стека внутренних исключений ---
в System.Data.Mapping.Update.Internal.StartTranslator.Update (Диспетчер stateManager, адаптер IEntityAdapter)
в System.Data.EntityClient.EntityAdapter.Update (IEntityStateManager entityCache)
в System.Data.Objects.ObjectContext.StartChanges (параметры «» Параметры «»)
в System.Data.Objects.ObjectContext.StartChanges ()
в MyApplication.ImageProcessing.ProcessImage (изображение) в C :\Code\ImageProcessing.cs: строка 224

Вот код, который выполняется. (Обратите внимание, что класс Image является классом сущности из Рамка.)

private static System.Random _randomLocation = new System.Random();

private void ProcessImage(Image image)
{
   float x = _randomLocation.Next(668); // note: the System.Random.Next method always returns an int
   float y = 0 - image.Height; // note: image.Height is an int and is always around 300-600 in value in this application

   image.X = x;
   image.Y = y;
   _dataContext.SaveChanges();
}

Извлечение схемы для таблицы, на которую он ссылается, является:

CREATE TABLE Image
(
    ImageID uniqueidentifier NOT NULL PRIMARY KEY,
    X float NOT NULL,
    Y float NOT NULL
)

Также следует отметить, что модель EF использует тип данных Single для столбцов X и Y.

16
задан John 7 September 2011 в 23:34
поделиться