मैं इकाई फ्रेमवर्क के लिए डेटा स्थानीयकरण तर्क को लागू करने की कोशिश कर रहा हूं। इसलिए यदि उदाहरण के लिए एक क्वेरी Title
प्रॉपर्टी का चयन करती है, तो दृश्यों के पीछे इसे वर्तमान उपयोगकर्ता संस्कृति के आधार पर कॉलम Title_enGB
या Title_deCH
का संदर्भ देना चाहिए।EntityFramework क्वेरी मैनिपुलेशन, डीबी प्रदाता रैपिंग, डीबी अभिव्यक्ति पेड़
इसे प्राप्त करने के लिए, मैं एंटिटी फ्रेमवर्क से डीबीएक्सप्रेस कमांडट्री को फिर से लिखना चाहता हूं। मैंने सोचा कि trees क्रॉस डेटाबेस डालने/अद्यतन/चयन प्रश्नों के निर्माण के लिए एक नया आम .NET तरीका है .. लेकिन अब System.Data.Metadata
औरमें सभी प्रासंगिक रचनाकार/कारखानों System.Data.Entity.dll
आंतरिक हैं !! (एमएसडीएन में जनता के रूप में प्रलेखित, जैसे: DbExpressionBuilder
)।
क्या किसी के पास क्वेरी पेड़ पुनर्लेखन के साथ या बिना इस क्वेरी मैनिपुलेशन को प्राप्त करने का कोई विचार है?
मेरी वांछित कोड: (public class DbProviderServicesWrapper : DbProviderServices
)
/// <summary>
/// Creates a command definition object for the specified provider manifest and command tree.
/// </summary>
/// <param name="providerManifest">Provider manifest previously retrieved from the store provider.</param>
/// <param name="commandTree">Command tree for the statement.</param>
/// <returns>
/// An exectable command definition object.
/// </returns>
protected override DbCommandDefinition CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
{
var originalCommandTree = commandTree as DbQueryCommandTree;
if (originalCommandTree != null)
{
var expression = new MyCustomQueryRewriter(originalTree.MetadataWorkspace).Visit(originalCommandTree.Query);
commandTree = DbQueryCommandTree.FromValidExpression(originalCommandTree.MetadataWorkspace, originalCommandTree.DataSpace, expression);
}
// TODO: UpdateCommand/InsertCommand
var inner = this.Inner.CreateCommandDefinition(providerManifest, commandTree);
var def = new DbCommandDefinitionWrapper(inner, (c, cd) => new DbCommandWrapper(c));
return def;
}
अद्यतन
एक मेज पर दो शीर्षक कॉलम होने शांत नहीं है, लेकिन इसकी आसान एक पहला कदम में लागू करने के लिए । बाद में मैं स्थानीय फ़ील्ड के साथ एक अन्य तालिका में शामिल हो जाऊंगा, इसलिए मुख्य तालिका में केवल परिवर्तनीय डेटा होगा।
दो संस्कृति-निर्भर मुद्दे हैं जिन्हें आप अपने स्थानीयकरण से अनदेखा कर रहे हैं। (1) कीमत अमेरिकी मुद्रा में व्यक्त की जाती है। (2) मात्रा मीट्रिक प्रणाली में व्यक्त की जाती है। – smartcaveman