私はエンティティフレームワークでこのようなものを作りたいと思っています:
db.Customers.OrderBy(c => c.MoneySpent/c.OrdersPlaced)
次のようなゼロ保護による除算を行う必要はありません。
db.Customers.OrderBy(c => c.OrdersPlaced == 0 ? 0.0 : c.MoneySpent/c.OrdersPlaced)
それを行うために、いくつかのことを試しましたが、問題を解決するのに最も近かったのは、コンテキストのコンストラクターで実行したARITHABORT
andを無効にすることでした。ANSI_WARNINGS
public class DatabaseContext : DbContext
{
static DatabaseContext()
{
Database.SetInitializer<DatabaseContext>(null);
}
public DatabaseContext()
: base("Name=DatabaseContext")
{
Database.ExecuteSqlCommand("SET ANSI_DEFAULTS OFF");
Database.ExecuteSqlCommand("SET ARITHABORT OFF");
Database.ExecuteSqlCommand("SET ANSI_WARNINGS OFF");
}
// Tables that can be queried directly
public DbSet<Customer> Customers { get; set; }
}
次に、Web API コントローラーから結果を取得しようとすると、まだ次のエラーが発生します。
...failed to serialize the response body for content type 'application/json...
InnerException: Divide by zero error encountered...
SQL Server Profiler で何が起こっているかを調べてみると、新しいクエリが作成されるたびに にANSI_WARNINGS
リセットされているように見えます。ON
クエリ間ANSI_WARNINGS
でとどまるように、おそらくデフォルト値を変更する方法はありますか?OFF