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.
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
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
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