2017-08-30 18 views
1

私がしようとしているのは、データベースを1行ずつ読み込み、各行のデータを使用してデータが表す型のオブジェクトを初期化することです。この場合、私はDeviceテーブルの行を読み込み、そのデータを持つDeviceオブジェクトを作成しようとしています。私はこのSO link見た:C#データベースのオブジェクトを直接クラスに読み込む

を、私はこのスニペットを試してみました:

 using(var dc = new DataContext(connectionString)) 
    { 
       List<Person> people = dc.ExecuteQuery(@" 
       SELECT Id, Name Address 
       FROM [People] 
       WHERE [Name] = {0}", name).ToList(); // some LINQ too 
    } 

しかし、それはこの使用のための型引数は、使用状況から

を推測することができない私に

を語っています

これは基本的に正しいですか、BondIOシリアライザ/デシリアライザを使用する必要がありますか?前述のようにhere

また、オブジェクトのメンバーの順序は、データベースの列の順序と同じではない場合があります。

その後、同じ日に....

私は次のように定義されたすべての私のデータベースオブジェクトとDBContextを持っている:

public class MyContext : DBContext 
    { 
      public dbSet<Device>{ get; set;} 
      etc... 
    } 

そして、私は今、このスニペットを使用してオブジェクトを取得しよう:

using (var db = new MyContext(ConnectionString)) 
     { 
      var res = db.Device.Find(ID); 
     } 

は、しかし、これは例外メッセージを与える

型」System.Data.Entity.ModelConfiguration.Conventions.AttributeToColumnAnnotationConvention`2を読み込むことができませんでした私は、データベースをチェックして、それは私が合格しています主キーのIDに基づいて、1つの値を返す必要があります。誰も私がまだ間違っていることを何らかのヒントを持っています。

答えて

1

ExecuteQueryはデータベースのクエリではなく、ステートメントを実行するためではありません。 SqlQueryの代わりに を使用する必要があります。クエリで設定するプロパティで新しいクラスを作成することは、クエリの簡略化されたバージョンを意味します。あなたのケースでは

public class Device 
{ 
    public int Id {get;set} 
    public string Name {get;set} 
    public string Address {get;set} 
} 

はその後

var people = dc.ExecuteQuery<Device>(@" 
       SELECT Id, Name Address 
       FROM [People] 
       WHERE [Name] = {0}", name).ToList(); 
+0

としてそれを使用しかし、私はすでにデバイスクラスを持っている場合、そのメンバーはちょうど持っているあなたのように定義して、なぜ私はすべての列を照会し、まっすぐにロードカントデバイスオブジェクト? – Alan

+0

私はsooryです - 私の答えは間違っています。私はそれを修正しています。 – HGMamaci

+0

ExecuteCommandを意味しますか? DataContext.SqlQueryは存在しないようです.... – Alan

関連する問題