2017-04-12 11 views
0

C#でオブジェクトを取得する際に問題があります。私はmongoドライバ2.4.3を使用します。mongodbドライバ3.4.2でオブジェクトを取得する方法C#

私はこのコードを持っている:私は

System.InvalidOperationException: 'No se pueden crear las instancias de 
    clases abstractas.' -> in this line collection.Find(filter).First(); 

そして第二に、この例外プログラムショーGetEmplyeeメソッドを呼び出すと、最初のコードで

public Employee GetEmployee(int id) 
    { 
     IMongoCollection<Employee> collection = conectWithDatabase(); 

     var filter = Builders<Employee>.Filter.Eq("EmployeeId", id); 
     var obtenido = collection.Find(filter).First(); 

     return obtenido; 
    } 

この

public List<Employee> GetAllEmployees() 
    { 
     IMongoCollection<Employee> collection = conectWithDatabase(); 
     var query = from employee in collection.AsQueryable<Employee>() 
        select employee; 
     return query.ToList(); 
    } 

を私はクエリvarをリストにキャストしようとすると、プログラムは同じ例外を表示します。

私はMongoDBからオブジェクトを取得しようとします。誰かが私を助けることができれば私は非常に感謝します。 申し訳ありません私の悪い英語。

public abstract class Employee 
{ 
    public int EmployeeId { get; set; } 
    public string Name { get; set; } 
    public DateTime StartDate { get; set; } 
} 

public class FullTimeEmployee : Employee 
{ 
    public int Salary { get; set; } 
} 

public class PartTimeEmployee : Employee 
{ 
    public double HourlyRate { get; set; } 
} 
+0

のためにこれを行うことができるはずです。したがって、Employeeクラスが抽象クラスとして宣言されている可能性が最も高いです。このクラスの宣言をしてください? – JleruOHeP

+0

はい従業員は抽象です私はFullTimeEmployeeとPartTimeEmployeeを持っています。しかし、私はデータベースが私に仕事を与える従業員のタイプを知らない。私は質問を更新します @JleruOHeP – nicoperez

+0

ここをクリックしてくださいhttp://mongodb.github.io/mongo-csharp-driver/2.4/reference/bson/mapping/polymorphism/ – Veeram

答えて

0

基本レベルでは、ディスクリミネータ列をマップし、それに基づいてタイプを一致させる必要があります。

ドライバがあなたの例外は「抽象クラスのインスタンスを作成できません」であるあなた

Inheritance in MongoDb: how to request instances of defined type

+0

問題はその私は知らないデータベースがクエリの結果で私に与える従業員のタイプ。 – nicoperez

+0

次に、discriminator列をマップし、nameof(クラスの型)と一致させてから、 – Mardoxx

+0

OKをキャストします。 Bue問題はその私は従業員を取ることができないと私はリンクであなたの例としてコードを実装しようとし、それは動作しません。私は従業員をキャストすることはできません。 – nicoperez

関連する問題