2016-08-17 12 views
1

NpgsqlでEntity Framework 6を​​使用しています。 Npgql.EntityFrameworkからEntityFramework6.Npgsqlパッケージのバージョン3.1.1に更新されました。Cant cast to float8をSingleにキャストしますか? NpgsqlのSystem.InvalidCastException

簡単に修正された移動による小さな問題の後で、私は今この例外に取り残されています。ログから私は得る:

Date = 2016-08-17 15:10:58 | Severity = Exception | Source = Reflect.Logging.SimpleLog.SimpleLogLogger.LogError | ThreadId = 7 | Type = System.InvalidCastException | Source = 
    Npgsql.SimpleTypeHandler`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].ReadFully | Message = Can't cast database type float8 to Single | StackTrace = at Npgsql.SimpleTypeHandler`1[T].ReadFully[T2] (Npgsql.ReadBuffer buf, Int32 len, Npgsql.BackendMessages.FieldDescription fieldDescription) in <filename unknown>:line 0 
      at Npgsql.TypeHandler.ReadFully[T] (Npgsql.BackendMessages.DataRowMessage row, Int32 len, Npgsql.BackendMessages.FieldDescription fieldDescription) in <filename unknown>:line 0 
      at Npgsql.NpgsqlDataReader.ReadColumnWithoutCache[T] (Int32 ordinal) in <filename unknown>:line 0 

私のPostgresスキーマを見ると、私は 'float8'タイプのフィールドを見ません。

これは、例外をスローする方法である:

public List<TUser> GetByEmail(string email) 
{ 
    return Context.Set<TUser>().Where(q => q.Email == email).ToList(); 
} 

そして、これは、DBスキーマです:

CREATE TABLE "Users" (
    "Id" integer NOT NULL, 
    "UtcOffset" double precision, 
    "Guid" uuid, 
    "NotificationHourOfDay" integer, 
    "NotificationTimeOfDay" time without time zone, 
    "SendNotifications" boolean, 
    "IsLocked" boolean, 
    "Username" character varying, 
    "Screenname" character varying, 
    "Email" character varying, 
    "IsConfirmed" boolean, 
    "ConfirmationToken" character varying, 
    "LastActivityDateUtc" timestamp without time zone, 
    "SignUpDateUtc" timestamp without time zone, 
    "SignUpIpAddress" character varying, 
    "CountryCode" character varying, 
    "CountryName" character varying, 
    "PasswordResetToken" uuid, 
    "PasswordResetRequestDateUtc" timestamp without time zone, 
    "IsAwaitingPasswordResetTokenConfirmation" boolean, 
    "MessageHistory" jsonb, 
    "SendDigest" boolean, 
    "DigestLastSendDateUtc" timestamp without time zone, 
    "SignUpUserAgent" text, 
    "SignUpApplication" character varying, 
    "PaymentProviderCustomerId" character varying, 
    "Discriminator" character varying, 
    "UserName" character varying, 
    "PasswordHash" bytea, 
    "Salt" bytea, 
    "Profile" jsonb, 
    "LegacyId" integer 
); 

誰かがこの例外の起源にいくつかの光を当てることができると私が何でありますか行方不明?

ありがとうございます!

+0

データベース内のフィールドを例外の原因となるコードと質問に追加できますか?そうでなければ、それは謎です。 – wandercoder

+0

質問を編集して情報を追加しました – Corstiaan

答えて

1

通常、これはデータベースのフィールドとテーブルエントリにマップされるメモリ内クラスの不一致です。 Npgsqlはdoubleを表現するためにfloat8を使用します。私の推測では、あなたのメモリ内クラスは浮動小数点としてのUtcOffsetを持ち、doubleでなければなりません。

関連する問題