मुझे नीचे वर्णित परिदृश्य का समाधान खोजने में मुझे बहुत लंबा रास्ता लगा। प्रतीत होता है कि एक साधारण संबंध होना मुश्किल साबित हुआ। सवाल यह है:इकाई फ्रेमवर्क, कोड प्रथम, स्वतंत्र संघों के साथ "एक से कई" संबंध अपडेट करें
एंटीटी फ्रेमवर्क 4.1 (कोड फर्स्ट दृष्टिकोण) और "इंडिपेंडेंट एसोसिएशन" का उपयोग करके मैं "अलग" परिदृश्य में मौजूदा "कई से एक" रिश्ते को अलग-अलग अंत कैसे सौंपूं (मेरे में Asp.Net मामला)।
मॉडल:
मुझे लगता है कि स्वतंत्र संघों के बजाय ForeignKey संबंधों का उपयोग कर एक विकल्प हो गया होता, लेकिन यह मेरी प्राथमिकता मेरा Pocos में एक ForeignKey कार्यान्वयन नहीं किया गया था।
public class Customer:Person
{
public string Number { get; set; }
public string NameContactPerson { get; set; }
private ICollection<Target> _targets;
// Independent Association
public virtual ICollection<Target> Targets
{
get { return _targets ?? (_targets = new Collection<Target>()); }
set { _targets = value; }
}
}
लक्ष्य एक ग्राहक है:
public class Target:EntityBase
{
public string Name { get; set; }
public string Description { get; set; }
public string Note { get; set; }
public virtual Address Address { get; set; }
public virtual Customer Customer { get; set; }
}
ग्राहक एक व्यक्ति वर्ग से निकला है:
public class Person:EntityBase
{
public string Salutation { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set ; }
public string Telephone1 { get; set; }
public string Telephone2 { get; set; }
public string Email { get; set; }
public virtual Address Address { get; set; }
}
EntityBase वर्ग कुछ प्रदान करता है
एक ग्राहक एक या अधिक लक्ष्य है सामान्य गुण:
public abstract class EntityBase : INotifyPropertyChanged
{
public EntityBase()
{
CreateDate = DateTime.Now;
ChangeDate = CreateDate;
CreateUser = HttpContext.Current.User.Identity.Name;
ChangeUser = CreateUser;
PropertyChanged += EntityBase_PropertyChanged;
}
public void EntityBase_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (Id != new Guid())
{
ChangeDate = DateTime.Now;
ChangeUser = HttpContext.Current.User.Identity.Name;
}
}
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, e);
}
public event PropertyChangedEventHandler PropertyChanged;
public Guid Id { get; set; }
public DateTime CreateDate { get; set; }
public DateTime? ChangeDate { get; set; }
public string CreateUser { get; set; }
public string ChangeUser { get; set; }
}
प्रसंग:
public class TgrDbContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<Address> Addresses { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Target> Targets { get; set; }
public DbSet<ReportRequest> ReportRequests { get; set; }
// If OnModelCreating becomes to big, use "Model Configuration Classes"
//(derived from EntityTypeConfiguration) instead
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().HasOptional(e => e.Address);
modelBuilder.Entity<Customer>().HasMany(c => c.Targets).WithRequired(t => t.Customer);
}
public static ObjectContext TgrObjectContext(TgrDbContext tgrDbContext)
{
return ((IObjectContextAdapter)tgrDbContext).ObjectContext;
}
}
मेरे पास अगले 8 घंटों के भीतर उत्तर पोस्ट करने के लिए पर्याप्त अनुशंसा अंक नहीं हैं। जैसे ही यह संभव हो जाएगा पोस्ट करेंगे। – Martin
यह बहुत चुनौतीपूर्ण है कि मैं इस समस्या के बारे में पूरे ब्लॉग पोस्ट पर काम कर रहा हूं (मैंने इसे लगभग दो महीने तक किया है लेकिन मैं अभी भी उससे पूरी तरह से संतुष्ट नहीं हूं)। कई पक्षों पर एक से कई संबंधों का अद्यतन शायद मुख्य कारण है कि क्यों विदेशी कुंजी संघों को लागू किया गया था (इस भयानक व्यवहार को ठीक करने के बजाय)। –
मैं सहमत हूं। यह प्रक्रिया निश्चित रूप से होने की तुलना में निश्चित रूप से अधिक कठिन लगती है। फिर भी, ईएफ 4 और 4.1 पिछले संस्करणों में महत्वपूर्ण सुधार थे। ईएफ 4.1 के आस-पास के विषयों को खोजना सीटीपी और रिलीज संस्करणों के बीच एपीआई परिवर्तनों के कारण मुश्किल है, अलग-अलग बनाम जुड़े परिदृश्यों में अलग-अलग दृष्टिकोण, कई, अत्यधिक सरलीकृत नमूना अनुप्रयोग जो एन के साथ आने वाली अतिरिक्त जटिलता के लिए मार्गदर्शन प्रदान नहीं करते हैं -टेयर समाधान ... – Martin