แยกแยะบริบทโดยตั้งค่าสคีมาเริ่มต้น
ใน EF6 คุณสามารถมีหลายบริบทเพียงแค่ระบุชื่อสำหรับสคีมาฐานข้อมูลเริ่มต้นในOnModelCreating
วิธีการที่คุณDbContext
ได้รับคลาส (โดยที่การตั้งค่า Fluent-API) สิ่งนี้จะทำงานใน EF6:
public partial class CustomerModel : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("Customer");
// Fluent API configuration
}
}
ตัวอย่างนี้จะใช้ "ลูกค้า" เป็นคำนำหน้าสำหรับตารางฐานข้อมูลของคุณ (แทนที่จะเป็น "dbo") ที่สำคัญยังจะคำนำหน้า__MigrationHistory
ตาราง (s), Customer.__MigrationHistory
เช่น ดังนั้นคุณสามารถมีมากกว่าหนึ่ง__MigrationHistory
ตารางในฐานข้อมูลเดียวหนึ่งตารางสำหรับแต่ละบริบท ดังนั้นการเปลี่ยนแปลงที่คุณทำกับบริบทหนึ่งจะไม่ยุ่งกับสิ่งอื่น
เมื่อเพิ่มการโอนย้ายให้ระบุชื่อแบบเต็มของคลาสการกำหนดค่าของคุณ (มาจากDbMigrationsConfiguration
) เป็นพารามิเตอร์ในadd-migration
คำสั่ง:
add-migration NAME_OF_MIGRATION -ConfigurationTypeName FULLY_QUALIFIED_NAME_OF_CONFIGURATION_CLASS
คำศัพท์สั้น ๆ เกี่ยวกับคีย์บริบท
อ้างอิงจากบทความ MSDN นี้ " บทที่ - แบบจำลองหลายตัวที่กำหนดเป้าหมายฐานข้อมูลเดียวกัน " EF 6 อาจจะจัดการกับสถานการณ์แม้ว่าจะมีเพียงMigrationHistory
ตารางเดียวเท่านั้นเพราะในตารางนั้นมีคอลัมน์ContextKeyเพื่อแยกความแตกต่างของการย้ายข้อมูล
อย่างไรก็ตามฉันต้องการมีมากกว่าหนึ่งMigrationHistory
ตารางโดยระบุ schema เริ่มต้นตามที่อธิบายไว้ข้างต้น
การใช้โฟลเดอร์การโยกย้ายแยกต่างหาก
ในสถานการณ์ดังกล่าวคุณอาจต้องการทำงานกับโฟลเดอร์ "การโยกย้าย" ที่แตกต่างกันในโครงการของคุณ คุณสามารถตั้งค่าDbMigrationsConfiguration
คลาสที่ได้รับตามการใช้MigrationsDirectory
คุณสมบัติ:
internal sealed class ConfigurationA : DbMigrationsConfiguration<ModelA>
{
public ConfigurationA()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ModelA";
}
}
internal sealed class ConfigurationB : DbMigrationsConfiguration<ModelB>
{
public ConfigurationB()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\ModelB";
}
}
สรุป
โดยรวมแล้วคุณสามารถพูดได้ว่าทุกอย่างแยกจากกันอย่างสมบูรณ์: บริบทโฟลเดอร์การย้ายข้อมูลในโครงการและตารางในฐานข้อมูล
ฉันจะเลือกวิธีการแก้ปัญหาดังกล่าวหากมีกลุ่มของหน่วยงานที่เป็นส่วนหนึ่งของหัวข้อที่ใหญ่กว่า แต่ไม่เกี่ยวข้อง (ผ่านคีย์ต่างประเทศ) ซึ่งกันและกัน
หากกลุ่มของเอนทิตีไม่มีอะไรที่จะทำซึ่งกันและกันฉันจะสร้างฐานข้อมูลแยกต่างหากสำหรับแต่ละหน่วยงานและเข้าถึงพวกเขาในโครงการต่างๆอาจมีบริบทเดียวในแต่ละโครงการ