0

私が持っているもの:

  • データを含む DB とそれへの接続

    public class VMMExtDBContext : DbContext {...}
    
  • この内部では、次のように完全に機能します。

    public DbSet<VirtualMachine> VirtualMachines { get; set; }
    
  • ここで、MSSMS から完全に実行される実行クエリが必要です。

    select SUM(CPUCount), SUM(RAMSizeGB), SUM(PrimaryHDDVolumeGB) 
    from TempVMs 
    where VMCloudID='f51b73b5-fdb3-4af2-956b-b27fccc5e19d'
    

だから私はコードを書いた:

public QuotaPresenter(VMMExtDBContext db, Guid CloudID)
{
        string entitySQL = "select SUM(CPUCount), SUM(RAMSizeGB), SUM(PrimaryHDDVolumeGB) from TempVMs where VMCloudID='"+CloudID.ToString()+"'";
        //or = "select SUM(CPUCount), SUM(RAMSizeGB), SUM(PrimaryHDDVolumeGB) from dbo.TempVMs where VMCloudID='"+CloudID.ToString()+"'";


        var objectContext = (db as IObjectContextAdapter).ObjectContext;

        var query=objectContext.CreateQuery<UsedQuotaValue>(entitySQL);

        query.MergeOption = System.Data.Objects.MergeOption.NoTracking;
        var QuoteValues=query.ToList(); //<--Exception here
        if (QuoteValues.Count > 0) {
            //На случай если нет ни одной виртуальной машины - оставляем по нулям
            UQV.CPU = QuoteValues[0].CPU;
            UQV.RAM = QuoteValues[0].RAM;
            UQV.PrimaryHDDGB = QuoteValues[0].PrimaryHDDGB;
        }
}

そして、実行すると例外が発生しました:

[System.Data.EntitySqlException] 'TempVMs' は、現在のスコープまたはコンテキストで解決できませんでした。参照されるすべての変数がスコープ内にあること、必要なスキーマがロードされていること、名前空間が正しく参照されていることを確認してください。単純な識別子の近く、1 行目、68 列目。

私は何が欠けていますか?

4

2 に答える 2

0

問題は、エンティティ SQL の代わりに通常の Transact-SQL を使用しようとしていることにあると思いますが、実際にはそれらは同じではありません。Aggregate Functionsを見てください。これ役立つ場合があります(自分でテストすることはできません)

SELECT VALUE SqlServer.SUM(p.ListPrice) 
FROM AdventureWorksEntities.Products as p
于 2012-08-16T11:59:56.027 に答える
0

問題は、テーブル名からスキーマ識別子が欠落していることだと思います。そして、私が正しい場合、クエリはgroup byステートメントなしでは機能しません。

于 2012-08-16T10:46:52.367 に答える