2015-11-10 4 views
1

Я использую Entity Framework. Моя .net Framework 3.5, и я не могу ее улучшить из-за того, что модель policy.my компании - это первая база данных, и у меня есть объект под названием RequestMaster. Я не хочу, чтобы использовать его непосредственно, то я создал производный класс каждого объекта, который наследует егоСопоставление объекта и наследование из объекта Entity Framework с новыми свойствами родителя

Теперь Пусть мой RequestMaster является:

public class RequestMaster 
    { 
     public int RequestId{ get; set; } 

     public RequestType RequestType { get; set; } 
    } 

и производный класс:

public class Request : RequestMaster 
{ 

    public List<Request> SelectAll() 
    { 

     return _dataContext.RequestMaster 
         .Include("RequestType") 
         .Select(x => new Request() 
         { 

          RequestId = x.RequestId, 
          RequestType = x.RequestType, 


         }).ToList(); 
    } 

} 

тогда я использую его:

var req = new Request(); 
_request = req.SelectAll(); 

Моя проблема все свойства (RequestID и ТипЗапроса) являются ноль или нуль, я проверил и вижу, что все в порядке, но проблема заключается в отображении RequestMaster для запроса. я изменил запрос и переопределил свойства RequestMaster, и проблема решена!

public class Request : RequestMaster 
    { 


     public new int RequestId { get; set; } 
     public new int RequestType { get; set; } 

     public void SelectAll() 
     { 

      return _dataContext.RequestMaster 
          .Include("RequestType") 
          .Select(x => new Request() 
          { 

           RequestId = x.RequestId, 
           RequestType = x.RequestType, 


          }).ToList(); 
     } 

    } 

Не мог бы кто-нибудь сказать мне, что случилось с моим картографированием и как новое свойство решило его?

+0

почему ваш 'метод SelectAll' имеет тип возврата' void'? – singsuyash

+0

не должен ваш метод SelectAll имеет тип возврата? вместо пустоты? –

+0

Извините, это тип возврата - это список , моя ошибка - изменить его в вопросе. Я редактировал вопрос. –

ответ

1

Вам не нужно наследование:

  • Сформировать результат Request, вы даже не нужно наследование, просто формировать его.
  • Чтобы добавить метод в RequestMaster, вам не нужно наследование, просто соберите другой файл и создайте public partial class RequestMaster и добавьте к нему свой метод public List<RequestMaster> SelectAll() или public List<Request> SelectAll().
  • Чтобы управлять классом из вашего базового объекта и иметь картографирование по-прежнему, вы должны использовать стандартный механизм наследования в EF, например, Table Per Type.

Но в целом я настоятельно рекомендую не делать, а вместо этого, отдельных проблем и использовать другой класс, называемый, например RequestMasterBusinessLogic содержать эту логику, вы также можете формировать свои объекты здесь, в этом классе, и если вы на самом деле нужен класс запроса тоже написать этот код в RequestMasterBusinessLogic без получения от RequestMaster:

public partial class RequestMasterBusinessLogic 
{ 
    private YourDataContext Context; 
    public RequestMasterBusinessLogic() 
    { 
     Context= new YourDataContext(); 
    } 
    public List<RequestMaster> SelectAll() 
    { 
     Context.RequestMaster.Include("RequestType").ToList(); 
    } 
    public List<Request> SelectAllRequests() 
    { 
     Context.RequestMaster 
       .Include("RequestType") 
       .Select(x => new Request() 
       { 
        RequestId = x.RequestId, 
        RequestType = x.RequestType, 
       }).ToList(); 
    } 
} 
+0

да, это полезно, и я буду использовать его, спасибо, но не могли бы вы рассказать мне, что случилось с моим картографированием? почему это работает с новыми свойствами? –

+0

Благодарим вас за отзыв @samirariazati, если честно, я не уверен в причине решения проблемы, когда вы использовали 'new', но я знаю, когда вам нужно использовать наследование с EF, вы также должны редактировать сопоставления. Я сообщу вам, если бы у меня был лучший ответ на ваш комментарий :) –

Смежные вопросы