मैं पहले इकाई फ्रेमवर्क कोड में डेटाबेस दृश्य का उपयोग कैसे कर सकता हूं,
मैं पहले इकाई फ्रेमवर्क कोड में डेटाबेस दृश्य का उपयोग कैसे कर सकता हूं,
जवाबों:
यदि, मेरी तरह, आप केवल एक अन्य डेटाबेस (मेरे मामले में एक एरपी) से आने वाली मैपिंग इकाई में रुचि रखते हैं, तो उन्हें अपने आवेदन के विशिष्ट संस्थानों से संबंधित करने के लिए, फिर आप एक तालिका का उपयोग करते हुए विचारों का उपयोग कर सकते हैं (नक्शे को देखने में) उसी तरह!)। जाहिर है, यदि आप उस संस्थाओं को अपडेट करने की कोशिश करते हैं, तो आपको एक अपवाद मिलेगा यदि दृश्य अपडेट नहीं है। प्रक्रिया सामान्य के मामले में (तालिका के आधार पर) संस्थाओं के समान है:
व्यू के लिए एक अलग नाम सेट करने के लिए (कंस्ट्रक्टर में टोटेबल ("फू" का उपयोग करके), या विशेष गुणों को सेट करने के लिए एक FooViewConfiguration फ़ाइल का उपयोग करें;
public class FooViewConfiguration : EntityTypeConfiguration<FooView>
{
public FooViewConfiguration()
{
this.HasKey(t => t.Id);
this.ToTable("myView");
}
}
मॉडल के लिए FooViewConfiguration फ़ाइल जोड़ें
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FooViewConfiguration ());
}
[Table("myView")]
यह यकीनन उपयोग करने की तुलना में सरल है EntityTypeConfiguration
।
यह एक अद्यतन हो सकता है लेकिन EF कोड के साथ विचारों का उपयोग करने के लिए सबसे पहले कक्षा के शीर्ष पर [टेबल ("NameOfView")] जोड़ें और सभी सही तरीके से काम करें बिना सभी हुप्स के माध्यम से जाने के लिए हर किसी के माध्यम से जा रहा है। इसके अलावा, आपको कॉलम में से एक [कुंजी] कॉलम के रूप में रिपोर्ट करना होगा। इसे लागू करने के लिए नीचे मेरा नमूना कोड दिया गया है।
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SomeProject.Data
{
[Table("SomeView")]
public class SomeView
{
[Key]
public int NameID { get; set; }
public string Name { get; set; }
}
}
और यहाँ संदर्भ जैसा दिखता है
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}
यदि आप चाहते हैं कि सभी सामान्यीकृत वस्तुओं का एक समूह है, तो हो सकता है कि आपने IQueryable<TDenormolized>
अपनी DbContext
कक्षा में केवल सार्वजनिक संपत्ति प्राप्त की हो ।
में get
आप अपने de-सामान्यीकृत वस्तुओं में de-normoalized मूल्यों परियोजना के लिए एक Linq परिणाम लौटने। यह DB दृश्य लिखने से बेहतर हो सकता है क्योंकि आप प्रोग्रामिंग कर रहे हैं, आप केवल select
बयानों का उपयोग करके सीमित नहीं हैं । इसके अलावा यह समय संकलन सुरक्षित है।
बस सावधान रहना चाहिए ToList()
कि कॉल की तरह गणना को ट्रिगर न करें , जो स्थगित क्वेरी को तोड़ देगा और आप डेटाबेस से एक लाख रिकॉर्ड वापस पाने के साथ समाप्त हो सकते हैं और उन्हें अपने एप्लिकेशन सर्वर पर फ़िल्टर कर सकते हैं।
मुझे नहीं पता कि यह सही तरीका है, लेकिन मैंने कोशिश की और यह मेरे लिए काम करता है।
मुझे पता है कि यह एक पुराना सवाल है और यहाँ कई उत्तर हैं, लेकिन मैंने इस मुद्दे का उपयोग करने पर एक मुद्दे पर मजबूर किया और जब मैं पैकेज मैनेजर कंसोल में अपडेट-डेटाबेस कमांड का उपयोग करता हूं, तो एक त्रुटि हुई:
डेटाबेस में '...' नाम की एक वस्तु पहले से ही है।
और मैं इस समस्या को हल करने के लिए इन चरणों का उपयोग करता हूं:
आशा करता हूँ की ये काम करेगा।
migrationBuilder.Sql("CREATE OR REPLACE VIEW ...
); ताकि सहकर्मी अपने डेटाबेस को अपग्रेड करने के लिए भी इसका इस्तेमाल कर सकें।