2017-04-12 4 views
0

C#에서 개체를 가져 오는 데 문제가 있습니다. mongo 드라이버 2.4.3을 사용합니다.mongodb 드라이버 3.4.2에서 개체를 얻는 방법 C#

이 코드가 : I가 GetEmplyee 방법 프로그램 표시이 예외

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

호출하면

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가 있습니다. 그러나 나는 데이터베이스가 나를 일하게하는 Employee의 타입을 모른다. 나는 질문을 업데이트한다 @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

그 문제는 내가 모른다. 데이터베이스가 쿼리의 결과에서 나에게주는 Employee 유형. – nicoperez

+0

그런 다음 discriminator 열을 매핑하고 nameof (클래스 유형)와 일치시킨 다음 – Mardoxx

+0

OK를 캐스팅합니다. Bue 문제는 그 직원이 걸릴 수 없습니다 및 링크에서 귀하의 예제로 코드를 구현하려고하고 그것은 작동하지 않습니다. 나는 직원에게 그것을 던질 수 없습니다. – nicoperez