5

से बचने के लिए माइग्रेशन से डीबीकॉन्टेक्स्ट को बाहर निकालें I MySQL (Pomelo.EntityFrameworkCore.MySql ड्राइवर) के साथ ASP.NET EF कोर का उपयोग कर रहा हूं। इस तरह के एक संदर्भ पैदा की जरूरत विशिष्ट विन्यास की कुछ पंक्तियाँ जो MSSQL के साथ डिफ़ॉल्ट DbContext नहीं है, मैं एक MySqlContext बनाया:कॉन्टेक्स्ट-पैरामीटर

public class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 

तो मेरे सारे DbContexts उन वर्ग से लिए गए हैं:

public class MyDbContext: MySqlContext { 
    public DbSet<MyModel> MyModels{ get; set; } 
    // ... 
} 

मेरी परियोजना में मेरे पास वर्तमान में एक संदर्भ (डीबीकॉन्टेक्स्ट) है जिसमें डीबीसेट्स शामिल हैं। और MySQLContext, जो इस तरह का वास्तविक संदर्भ नहीं है क्योंकि इसमें कोई डीबीसेट नहीं है और केवल MySQL कॉन्फ़िगरेशन के लिए रैपर के रूप में कार्य करता है ताकि मैं उन्हें बेहतर ढंग से उपयोग कर सकूं।

लेकिन ऐसा लगता है कि माइग्रेशन उन्हें दो अलग-अलग संदर्भों के रूप में दिखाई देगा क्योंकि जब मैं एक प्रवास आदेश Add-Migration Test का उपयोग कर जोड़ने मैं त्रुटि

एक से अधिक DbContext मिला था मिल गया। निर्दिष्ट करें कि किस का उपयोग करना है। PowerShell कमांड के लिए '-Context' पैरामीटर और dotnet कमांड के लिए '--context' पैरामीटर का उपयोग करें।

इसलिए प्रत्येक माइग्रेशन पर मुझे आदेश में -Context MyContext जोड़ना होगा। मैं इससे बचना चाहूंगा, क्योंकि जैसा कि मैंने कहा था कि दूसरा MySQLContext वास्तविक संदर्भ नहीं है जिसमें मॉडल और माइग्रेशन हैं। माइग्रेशन टूल को बताने का कोई तरीका है? मुझे ईएफ मॉडल के लिए [NotMapped] विशेषता की तरह कुछ चाहिए, जो ईएफ को बताता है: इस संपत्ति को डेटाबेस में संग्रहीत न करें। इस तरह मुझे ईएफ को बताने की जरूरत है: MySQLContext क्लास को अनदेखा करें क्योंकि उन्हें कोई माइग्रेशन की आवश्यकता नहीं है।

उत्तर

5

मेक आधार वर्ग सार:

public abstract class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 
+0

डॉन, इतनी आसान और तार्किक रूप से बाद में धन्यवाद! यहां हम कह रहे हैं 'कभी-कभी, आप पेड़ों के लिए लकड़ी नहीं देख सकते': डी – Lion

2

Use-DbContext MyContext आदेश डिफ़ॉल्ट संदर्भ के रूप में MyContext सेट हो जाएगा अपने PowerShell सत्र के लिए उपयोग करने के लिए। हर बार -Context निर्दिष्ट करने से बचने का यह एक और तरीका है।