Entity Framework
कोड प्रथम सम्मेलन
खोज…
टिप्पणियों
कन्वेंशन कोड-प्रथम के साथ काम करते समय डोमेन वर्ग परिभाषाओं के आधार पर एक वैचारिक मॉडल को स्वचालित रूप से कॉन्फ़िगर करने के लिए डिफ़ॉल्ट नियमों का एक सेट है। कोड-प्रथम सम्मेलनों को System.Data.Entity.ModelConfiguration.Conventions नाम स्थान ( EF 5 और EF 6 ) में परिभाषित किया गया है।
प्राथमिक कुंजी कन्वेंशन
डिफ़ॉल्ट रूप से एक संपत्ति एक प्राथमिक कुंजी है यदि किसी वर्ग की संपत्ति का नाम "आईडी" (मामला संवेदनशील नहीं है), या वर्ग का नाम "आईडी" है। यदि प्राथमिक कुंजी गुण का प्रकार संख्यात्मक या GUID है, तो इसे पहचान स्तंभ के रूप में कॉन्फ़िगर किया जाएगा। सरल उदाहरण:
public class Room
{
// Primary key
public int RoomId{ get; set; }
...
}
सम्मेलनों को हटाना
आप OnModelCreating
विधि को ओवरराइड करके System.Data.Entity.ModelConfiguration.Conventions नाम स्थान में परिभाषित किसी भी कन्वेंशन को हटा सकते हैं।
निम्न उदाहरण PluralizingTableNameConference को हटा देता है।
public class EshopContext : DbContext
{
public DbSet<Product> Products { set; get; }
. . .
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
डिफ़ॉल्ट रूप से EF 's' द्वारा निकाले गए इकाई वर्ग नाम के साथ DB तालिका बनाएगा। इस उदाहरण में, कोड फर्स्ट को PluralizingTableName कन्वेंशन को अनदेखा करने के लिए कॉन्फ़िगर किया गया है, इसलिए इसके बजाय dbo.Products
टेबल dbo.Product
तालिका बनाई जाएगी।
डिस्कवरी टाइप करें
डिफ़ॉल्ट रूप से कोड पहले मॉडल में शामिल है
- संदर्भ वर्ग में DbSet संपत्ति के रूप में परिभाषित प्रकार।
- इकाई प्रकारों में शामिल संदर्भ प्रकार भले ही वे अलग-अलग विधानसभा में परिभाषित किए गए हों।
- व्युत्पन्न वर्ग भले ही केवल आधार वर्ग को DbSet संपत्ति के रूप में परिभाषित किया गया हो
यहाँ एक उदाहरण है, कि हम अपने संदर्भ वर्ग में केवल DbSet<Company>
रूप में Company
जोड़ रहे हैं:
public class Company
{
public int Id { set; get; }
public string Name { set; get; }
public virtual ICollection<Department> Departments { set; get; }
}
public class Department
{
public int Id { set; get; }
public string Name { set; get; }
public virtual ICollection<Person> Staff { set; get; }
}
[Table("Staff")]
public class Person
{
public int Id { set; get; }
public string Name { set; get; }
public decimal Salary { set; get; }
}
public class ProjectManager : Person
{
public string ProjectManagerProperty { set; get; }
}
public class Developer : Person
{
public string DeveloperProperty { set; get; }
}
public class Tester : Person
{
public string TesterProperty { set; get; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<Company> Companies { set; get; }
}
हम देख सकते हैं कि सभी वर्ग मॉडल में शामिल हैं
DecimalPropertyConvention
डिफ़ॉल्ट एंटिटी फ्रेमवर्क द्वारा दशमलव गुण (18,2) कॉलम को डेटाबेस तालिकाओं में दशमलव में मैप करता है।
public class Box
{
public int Id { set; get; }
public decimal Length { set; get; }
public decimal Width { set; get; }
public decimal Height { set; get; }
}
हम दशमलव गुणों की शुद्धता को बदल सकते हैं:
1. उपयोग धाराप्रवाह एपीआई:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Box>().Property(b => b.Width).HasPrecision(20, 4);
}
केवल "चौड़ाई" संपत्ति को दशमलव (20, 4) में मैप किया जाता है।
2. सम्मेलन का चयन करें:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<DecimalPropertyConvention>();
modelBuilder.Conventions.Add(new DecimalPropertyConvention(10, 4));
}
प्रत्येक दशमलव संपत्ति को दशमलव (10,4) कॉलम में मैप किया जाता है।
संबंध सम्मेलन
कोड पहले नेविगेशन संपत्ति का उपयोग करके दो संस्थाओं के बीच संबंध का अनुमान लगाता है। यह नेविगेशन संपत्ति एक साधारण संदर्भ प्रकार या संग्रह प्रकार हो सकती है। उदाहरण के लिए, हमने स्टूडेंट क्लास में स्टैंडर्ड नेविगेशन प्रॉपर्टी और स्टैंडर्ड क्लास में ICollection नेविगेशन प्रॉपर्टी को परिभाषित किया। तो, पहले कोड ने स्टूडेंट्स टेबल में Standard_StandardId विदेशी कुंजी कॉलम डालकर स्टैंडर्ड और स्टूडेंट्स DB टेबल के बीच स्वचालित रूप से एक-से-कई संबंध बनाए।
public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public DateTime DateOfBirth { get; set; }
//Navigation property
public Standard Standard { get; set; }
}
public class Standard
{
public int StandardId { get; set; }
public string StandardName { get; set; }
//Collection navigation property
public IList<Student> Students { get; set; }
}
उपरोक्त संस्थाओं ने Standard_StandardId विदेशी कुंजी का उपयोग करके निम्नलिखित संबंध बनाया।
विदेशी कुंजी सम्मेलन
यदि क्लास ए क्लास बी के साथ संबंध में है और क्लास बी में ए के प्राथमिक कुंजी के समान नाम और प्रकार के साथ संपत्ति है, तो ईएफ स्वचालित रूप से मानता है कि संपत्ति विदेशी कुंजी है।
public class Department
{
public int DepartmentId { set; get; }
public string Name { set; get; }
public virtual ICollection<Person> Staff { set; get; }
}
public class Person
{
public int Id { set; get; }
public string Name { set; get; }
public decimal Salary { set; get; }
public int DepartmentId { set; get; }
public virtual Department Department { set; get; }
}
इस मामले में विभागीय स्पष्ट विवरण के बिना विदेशी कुंजी है।