POCO'ları kullanarak bir prototip EF uygulaması üzerinde çalışıyorum. Özellikle çerçeveye giriş olarak, uygulamayı güzel bir yapıya kurmanın iyi bir yolu hakkında merak ediyorum. Daha sonra buna WCF'yi dahil etmeyi planlıyorum. Yaptığım NeBir EF uygulamasının yapısını ayarlama
şudur:
1) Bir edmx dosyası oluşturulur, ancak Kod Üretimi Mülkü'yle Yok olarak ayarlayın ve benim veritabanı şemasını oluşturulan,
2) Poços yarattı hangi tüm benziyor: bir Bağlam yarattı
public class Person
{
public Person()
{
}
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
3)
public class PocoContext : ObjectContext, IPocoContext
{
private IObjectSet<Person> persons;
public PocoContext() : base("name=PocoContainer", "PocoContainer")
{
ContextOptions.LazyLoadingEnabled = true;
persons= CreateObjectSet<Person>();
}
public IObjectSet<Person> Persons
{
get
{
return persons;
}
}
public int Save()
{
return base.SaveChanges();
}
}
arayüzü aşağıdaki gibidir:
public interface IPocoContext
{
IObjectSet<Person> Persons { get; }
int Save();
}
4) Son olarak ben bir arabirim uygulayan, bir depo yarattı: Artık
public class PersonRepository : IEntityRepository<Person>
{
private IPocoContext context;
public PersonRepository()
{
context = new PocoContext();
}
public PersonRepository(IPocoContext context)
{
this.context = context;
}
// other methods from IEntityRepository<T>
}
public interface IEntityRepository<T>
{
void Add(T entity);
List<T> GetAll();
T GetById(int id);
void Delete(T entity);
}
Bununla uğraşırken binerken, bu tasarım örneğini beni dikte bir ben böyle getirme veya bazı verileri mutasyona istediğiniz her seferinde bağlantı havuzunu: her nasılsa bu sadece sadece de her depoyu başlatmasını, diğer taraftan, yanlış ve kusurlu hisseder
using (var context = new PocoContext())
{
PersonRepository prep = new PersonRepository();
List<Person> pers = prep.GetAll();
}
Yaşanmış içerik de, ihtiyaç duymayacak potansiyel olarak anlık nesneler nedeniyle, çok da iyi hissetmiyor.
Bu tasarımın nasıl yapılacağına dair ipuçları var mı? Bu şekilde bırakmalı mıyım? Bunu yaparken eklemem gereken veya genel olarak kaçmam gereken şeyler?
Ne tür bir uygulama bu? Web servis, WPF-app, başka bir şey? – alun
Bu durumda sadece bir konsol uygulamasıdır, çünkü sadece en az bir prototiptir. – duress
Sormamın nedeni, bağlamınızı nasıl ele aldığınızın, uygulama türünden büyük ölçüde etkilendiğidir. Örneğin bir wpf uygulamasında form başına bir bağlam ve bir web uygulamasında her bir http isteği için bir bağlam ve bir web hizmetinde yöntem başına bir bağlam olması yaygındır. – alun