2016-03-30 14 views
0

Visual Studio 2015'te WPF MVVM Light uygulaması geliştirdim, Entity Framework 6 kullanarak veritabanı ilk model oluşturma özelliği. Modellerim için Görünümlerimle kullanabileceğim Görünüm Model sınıfları oluşturuyorum (kullanıcı denetimleri).Map Entity Framework gezinme özellikleri ViewModel nesnelerine

Aşağıdaki üç EF modelim var; Bir Employee, birçok EmployeeStatu ve EmployeeStatu, ValidEmployeeStatu modelinde ilgili bir description ('İzin Yok', 'Arşivlenmiş' vb.) olabilir. Bu nedenle employeeID, EmployeeStatu numaralı FK'de ve validEmployeeStatusID, EmployeeStatu numaralı FK (ValidEmployeeStatu numaralı telefondan PK) 'dir.

public partial class Employee 
{ 
    public Employee() 
    { 
     this.EmployeeStatus = new HashSet<EmployeeStatu>(); 
    } 

    public int employeeID { get; set; } 
    // More properties here... 

    public virtual ICollection<EmployeeStatu> EmployeeStatus { get; set; } 
} 

public partial class EmployeeStatu 
{ 
    public int employeeStatusID { get; set; } 
    public int employeeID { get; set; } 
    public int validEmployeeStatusID { get; set; } 
    // More properties here... 

    public virtual Employee Employee { get; set; } 
    public virtual ValidEmployeeStatu ValidEmployeeStatu { get; set; } 
} 

public partial class ValidEmployeeStatu 
{ 
    public ValidEmployeeStatu() 
    { 
     this.EmployeeStatus = new HashSet<EmployeeStatu>(); 
    } 

    public int validEmployeeStatusID { get; set; } 
    public string description { get; set; } 
    // More properties here...  

    public virtual ICollection<EmployeeStatu> EmployeeStatus { get; set; } 
} 

İşte Benim için Çalışan Modelim;

var query = (from e in Context.Employees 
      .Include("EmployeeStatus.ValidEmployeeStatu") 
      .Where(comparison) 
      select new EmployeeViewModel 
      { 
       employeeID = e.employeeID, 
       securityID = e.securityID, 
       firstName = e.firstName, 
       middleName = e.middleName, 
       lastName = e.lastName, 
       suffix = e.suffix, 
       job = e.job, 
       organizationalUnit = e.organizationalUnit, 
       costCenter = e.costCenter, 
       notes = e.notes, 
       createdDate = e.createdDate 
      }); 

nasıl navigasyon özelliklerini benim Görünüm Modelleri için EmployeeStatu ve ValidEmployeeStatu harita yok:

public class EmployeeViewModel : ViewModelBase 
{ 
    private int _employeeId; 
    private string _securityId; 
    private IEnumerable<EmployeeStatusViewModel> _employeeStatus; 

    public EmployeeViewModel() 
    { 
     this.EmployeeStatusVMs = new HashSet<EmployeeStatusViewModel>(); 
    } 

    public IEnumerable<EmployeeStatusViewModel> EmployeeStatusVMs 
    { 
     get { return _employeeStatus; } 
     set 
     { 
      if (_employeeStatus.Equals(value)) return; 
      _employeeStatus = value; 
      RaisePropertyChanged(); 
     } 
    } 

    // More properties here... 
} 

Ben veri getirmek için bu LINQ sorgusu kullanıyorum: diğerleri aynı deseni takip? Ve daha sonra değerleri SaveChanges() için View Model nesnesinden modelinize nasıl döndürürsünüz? Teşekkür ederim.

cevap

1

Aynısını, modellerin ilk düzeyindeki gibi yapmalısınız. EmployeeViewModel Yani iç seninki oluşturma sth seversiniz:

employeeStatus = e.EmployeeStatus.Select(s=>new EmployeeStatusViewModel{...}.ToList() 

haritalama aynı tür modellemek için geri hareketli ama ViewModel dan Model. Veya automapper'ı kontrol edebilirsiniz. Blogları arayın.

+0

Teşekkürler, @jstadnicki. Bu mükemmel bir anlam ifade ediyor. Verileri VM'den Model'e döndürmek için benzer bir örnek hattınız var mı? Bir şekilde Automapper hakkında iyi belgeler bulamadım; bağlantıların çoğunun onaylanmamış yöntemler için kod vardı. – Alex

+0

Otomatik arama aracını arayın. Bunu el ile yapmaya gerek olmadığını göreceksiniz. Temelde eşleştirmeler 1-1, her iki şekilde de otomatik olarak yapılacaktır. – jstadnicki

+0

Bunu fark edersem Automapper'ı kullanmayı çok isterim, @jstadnicki :) Bulduğum linkler, yeni başlayanlar için henüz tamamlanmamış bir rehbere sahipti. Ana siteden "Başlarken", benim gibi bir noob için çok fazla yardım etmedi! Yukarıda yazdığınızı Automapper sözdiziminde görmek isterim. – Alex