यह मेरा मानचित्रण वर्ग है:

class MyTableMap : ClassMap<MyTable>
{
    public MyTableMap()
    {
        Schema("mySchema");
        Id(x => x.id);
        Map(x => x.SomeString);
    }
}           

यह मेरे पहले डेटाबेस में तालिका ([mySchema]। [MyTable]) के लिए ठीक काम करता है।

लेकिन यह तालिका ("माईटेबल") अलग-अलग डेटाबेस (वास्तव में बहुत सारे) में मौजूद है, लेकिन किसी भी कारण से स्कीमा को हमेशा अलग नाम दिया जाता है (इस पर मेरा कोई नियंत्रण नहीं है):

तो डेटाबेस "OtherDB" में टेबल [SomeOtherSchema] है। [MyTable] उसी संरचना के साथ [mySchema]। [MyTable] पहले डीबी में।

स्पष्ट कारणों से मैं प्रत्येक डेटाबेस के लिए एक अलग मैपिंग क्लास नहीं बनाना चाहता हूं।

तो: क्या मैपिंग क्लास की स्कीमा को बदलने का कोई तरीका है, इसलिए मुझे सिर्फ एक मैपिंग क्लास बनाना है (सिंगेलटन का उपयोग किए बिना!)?

21
Gener4tor 11 फरवरी 2019, 16:47

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि मुझे "DefaultSchema" का उपयोग करना है। तो मैंने इस मैपिंग कोड का इस्तेमाल किया:

class MyTableMap : ClassMap<MyTable>
{
    public MyTableMap()
    {
        Id(x => x.id);
        Map(x => x.SomeString);
    }
}           

जब मैं सत्र फैक्ट्री बनाता हूं तो मुझे डिफ़ॉल्ट स्कीमा सेट करना होगा:

var configure = Fluently.Configure();
var dbConfig = MsSqlConfiguration.MsSql2012.ConnectionString("Data Source=" + dataSource +
                                                            ";Initial Catalog=" + database +
                                                            ";Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

//Here I can set the default schema used by my mappings
var dbConfigWithSchema = dbConfig.DefaultSchema(database);  
var fluentDb = configure.Database(dbConfigWithSchema);

var fluentMap = fluentDb.Mappings(mappings);
return fluentMap.BuildSessionFactory();
19
Camilo Terevinto 26 फरवरी 2019, 22:46