2017-01-19 8 views
1

探す場所:データ型は、コードのこの部分でのEntity Frameworkの

public long my_function() 
{ 
    return bdd.Database.SqlQuery<long>("SELECT count(*) FROM mytable")).First(); 
} 

このコードは、MySQLデータベースに素晴らしい作品。

しかし、私は、SQL Serverデータベース上で同じコードを実行した場合、私はこのエラーを取得:

実際に
public int my_function() 
{ 
    return bdd.Database.SqlQuery<int>("SELECT count(*) FROM mytable")).First(); 
} 

、私は思う:

Erreur: The specified cast from a materialized 'System.Int32' type to the 'System.Int64' type is not valid. 

私は、私は私のコードを変更した場合は動作しますSQL Serverはcount(*)の戻り値にint32を使用し、mysqlはint64を使用しています。 EFとC#はint32をint64にキャストすることができません(奇妙です)

これまでに気づいたことがありますか?

私はCOUNT(*)はINT32容量を超えた場合に何が起こるか疑問に思って... (レコードの多くを持っている)

おかげでマップするSQLのINTを返しCOUNT SQL Serverで

答えて

0

.NetのInt32にあなたがより大きな値が必要な場合は、ドキュメントからCOUNT_BIG

を使用する必要があります。

COUNT_BIG always returns a bigint data type value. COUNT always returns an int data type value.

0

Did you notice this before ?

はい

I am wondering what will happen if my count(*) exceed int32 capacity... (a have a lot of records)

算術オーバーフローエラー

public long my_function() 
{ 
    return bdd.Database.SqlQuery<long>("SELECT COUNT_BIG(*) FROM mytable")).First(); 
} 

参考:あなたが持っているレコードの数を懸念している場合代わりにこれを試してみてください https://msdn.microsoft.com/en-us/library/ms190317.aspx

関連する問題