একই ডিবিতে একাধিক ডিবি প্রসঙ্গ এবং EF 6 এবং কোড ফার্স্ট মাইগ্রেশনগুলিতে অ্যাপ্লিকেশন


95

আমি সত্ত্বা ফ্রেমওয়ার্কে নতুন। আমি একটি এমভিসি অ্যাপ্লিকেশন সেটআপ করার চেষ্টা করছি যা EF 6 ব্যবহার করে I আমি কোড প্রথম মাইগ্রেশন ব্যবহার করছি am আমি অ্যাপ্লিকেশনগুলিতে অঞ্চলগুলি ব্যবহার করছি এবং এটি ভাঙার জন্য প্রতিটি অঞ্চলে আলাদা আলাদা ডিবি কনটেক্সট রাখতে চাই। আমি জানি EF 6 এর ContextKey আছে তবে আমি কীভাবে এটি ব্যবহার করব তার সম্পূর্ণ তথ্য খুঁজে পাই না। বর্তমানে আমি এক সময় কেবলমাত্র একটি প্রসঙ্গে মাইগ্রেশন ব্যবহার করতে পারি।

আমার মতো ইএফ-কে বুঝতে এবং ব্যবহারের জন্য কোনও নতুন ব্যক্তির পক্ষে যথেষ্ট বিশদ সহ একটি উদাহরণ দিতে পারে?

উত্তর:


177

সত্তা ফ্রেমওয়ার্ক 6 ফ্ল্যাগ এবং পতাকা DbContextযুক্ত করে একাধিক স এর জন্য সমর্থন যুক্ত করেছে । আমি আমার প্যাকেজ ম্যানেজার কনসোলে কমান্ডগুলি চালিয়েছি এবং নীচের আউটপুটটি আটকালাম ...-ContextTypeName-MigrationsDirectory

DbContextআপনার প্রকল্পে যদি 2 টি থাকে এবং আপনি চালনা করেন তবে enable-migrationsআপনি একটি ত্রুটি পাবেন (যেমন আপনি সম্ভবত ইতিমধ্যে জানেন):

PM> enable-migrations
More than one context type was found in the assembly 'WebApplication3'.
To enable migrations for 'WebApplication3.Models.ApplicationDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.ApplicationDbContext.
To enable migrations for 'WebApplication3.Models.AnotherDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.AnotherDbContext.

সুতরাং আপনি পৃথক enable-migrationsপ্রতিটি চালাতে হবে DbContext। এবং প্রতিটি Configuration.csফাইল উত্পন্ন করার জন্য আপনাকে একটি ফোল্ডার নির্দিষ্ট করতে হবে ...

PM> Enable-Migrations -ContextTypeName ApplicationDbContext -MigrationsDirectory Migrations\ApplicationDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.

PM> Enable-Migrations -ContextTypeName AnotherDbContext -MigrationsDirectory Migrations\AnotherDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.

প্রত্যেকের জন্য মাইগ্রেশন যুক্ত করতে DbContext, আপনি Configurationশ্রেণীর পুরোপুরি যোগ্যতাসম্পন্ন নাম নির্দিষ্ট করে এটির মতো করুন :

PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.

PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.

এবং আপনি update-databaseএকইভাবে চালান :

PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113124_InitialDatabaseCreation].
Applying explicit migration: 201402032113124_InitialDatabaseCreation.
Running Seed method.

PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113383_InitialDatabaseCreation].
Applying explicit migration: 201402032113383_InitialDatabaseCreation.
Running Seed method.

আশাকরি এটা সাহায্য করবে.


প্রতিটি প্রসঙ্গে আমার কি আলাদা কানেকশন স্ট্রিং রাখতে হবে বা এর আশেপাশে কোনও উপায় আছে?
Lrayh

4
তারা একই সংযোগের স্ট্রিং ভাগ করতে পারে। তবে আপনি তা নিশ্চিত করতে চান যে তারা একই টেবিলগুলিতে মানচিত্র রাখেনি।
অ্যান্টনি চু

যদি তারা একই টেবিলে মানচিত্র করে থাকে তবে আপনি এখনও নির্ধারণ করতে পারবেন কোন স্থানান্তরণটি প্রথমে চলবে এবং এর স্থানান্তর ফাইলটি টেবিলটি তৈরি করতে ছেড়ে যাবে এবং যা দ্বিতীয়টি চলবে এবং এটিকে সংশোধন করবে যাতে এটি ইতিমধ্যে উপস্থিত টেবিলটি তৈরি না করে। তারপরে আপনি সঠিক MigrateDatabaseToLatestVersionক্রমটিতে চলার ctx.Database.initialize()জন্য প্রতিটি প্রসঙ্গের জালটি ব্যবহার করতে পারেন , বা সঠিক ক্রমে Update-Databaseহাতে কমান্ডটি চালাতে পারেন। (এবং বিপরীত, আপনি যদি পূর্ববর্তী সংস্করণে ডিবি স্থানান্তর করেন)। এটি "বিপজ্জনক" তবে করা যেতে পারে।
জোটাবি

তাই আমি আমার প্রকল্পে মাইগ্রেশন যুক্ত করেছি এবং অ্যাপ্লিকেশনবিবি কনটেক্সট থেকে আলাদা একটি প্রসঙ্গ তৈরি করেছি। আমি সেই প্রসঙ্গটি ব্যবহার করতে যাচ্ছি যা প্রায় 6 মাস ধরে সাইট সম্পর্কিত ডেটা ছিল, তারপরে আমার অ্যাপ্লিকেশন ব্যবহারকারীটির সাথে গোলযোগ শুরু করার সময় এসেছে। আমার বেসিক লগইন এবং নিবন্ধকরণটি কাজ করছিল, তবে আমি কিছু অতিরিক্ত ক্ষেত্র যুক্ত করতে ব্যবহারকারী শ্রেণি প্রসারিত করতে চেয়েছিলাম। এই উত্তরটি সেই প্রসঙ্গে একটি নতুন মাইগ্রেশন কনফিগারেশন স্থাপনে খুব সহায়ক ছিল। ধন্যবাদ! # 1up
এরিক

4
আমি যদি এই সংক্ষিপ্তটির জন্য আপনাকে একটি +10 দিতে পারি তবে যথেষ্ট উত্তরের চেয়ে বেশি আমি দিতে পারি, ধন্যবাদ @ অ্যান্টনিচু।
করিম এজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.