मेरी तालिका में से किसी एक के लिए एक नया एक-एक संबंध जोड़ने के बाद मैं यह नहीं समझ सकता कि मेरे डेटाबेस में मौजूदा पंक्तियों के लिए डिफ़ॉल्ट डेटा कैसे जोड़ना है।ईएफ कोर में एक-से-एक संबंध जोड़ते समय डेटा माइग्रेट करना?
मेरे डेटाबेस मूल रूप से इस तरह देखा अपग्रेड से पहले:
-- Team --
Name: TEXT
-- History --
Id: INT
... जहां इतिहास है विदेशी कुंजी है अन्य असंबंधित टेबल से यह ओर इशारा किया।
मेरी उन्नयन में मैं मूल रूप से एक भी इतिहास के लिए एक टीम चाहते हैं तो अपने नए db लगता है:
-- Team --
Name: TEXT
HistoryId: INT
-- History --
Id: INT
मेरे समस्या अब, तथापि है कि मैं अपने DB में टीमें मौजूदा किया है और वे की जरूरत है अद्वितीय इतिहास पंक्तियों को इंगित करने के लिए, इसलिए मुझे किसी भी मौजूदा टीम के लिए एक नई इतिहास पंक्ति बनाने की आवश्यकता है।
मैंने अपने माइग्रेशन में अप-विधि में मैन्युअल रूप से प्रविष्टियों को जोड़ने का प्रयास किया, लेकिन चूंकि मेरे मॉडल मौजूदा स्कीमा से मेल नहीं खाते हैं, यह विफल हो जाता है।
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "HistoryId",
table: "Team",
nullable: false,
defaultValue: 0);
using (var db = new XMDBContext())
{
foreach (var team in db.Team)
team.History = new XMHistory();
db.SaveChanges();
}
migrationBuilder.CreateIndex(
name: "IX_Team_HistoryId",
table: "Team",
column: "HistoryId",
unique: true);
migrationBuilder.AddForeignKey(
name: "FK_Team_History_HistoryId",
table: "Team",
column: "HistoryId",
principalTable: "History",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
अच्छा इवान दिखता है! और मुझे लगता है कि यह जाने का एकमात्र तरीका है। यहां तक कि यदि कोई बीज विधि थी तो इससे मदद नहीं मिली होगी क्योंकि यह * डेटाबेस अपग्रेड के दौरान * नहीं चलती है। इस परिदृश्य को हमेशा कुछ मध्यस्थ डेटाबेस स्थिति की आवश्यकता होती है क्योंकि आप अभी तक ऐसा कुछ नहीं करने के लिए एक आवश्यक एफके जोड़ नहीं सकते हैं। –
@GertArnold मुझे लगता है कि आप सही हैं। मैं दो हिस्सों पर माइग्रेशन को विभाजित करने की सोच रहा था, जैसे कि मॉडल के लिए केवल शून्य संपत्ति को जोड़ना, माइग्रेशन, बीज (डेटा के साथ फ़ील्ड को पॉप्युलेट करना) उत्पन्न करना, फिर गैर नालीबल में नलिका बदलने और मॉडल में नेविगेशन प्रॉपर्टी जोड़ें, दूसरा माइग्रेशन उत्पन्न करें। यह सब अगर प्रत्येक माइग्रेशन के अंत में 'बीज' विधि चल रही है। लेकिन अब मुझे यकीन नहीं है कि यह संभव है, क्योंकि माइग्रेशन के दौरान संस्थाएं समान नहीं होंगी। –
... तो एसक्यूएल तरीका हो सकता है, डीबी एग्नोस्टिक एसक्यूएल लिखने के लिए बस कुछ जानकारी/हेल्पर्स (जैसे 'माइक्रोन जेनरेशनहेल्पर '' माइग्रेशन स्क्लजेनरेटर 'में इस्तेमाल किया जाना चाहिए)। या सीधे 'माइग्रेशनस्कलबिल्डर' में हुक करने का एक तरीका। चूंकि हमारे पास वर्तमान में 'माइग्रेशनबिल्डर' एक्टिवप्रोवाइडर 'स्ट्रिंग है (जो निश्चित रूप से कुछ भी नहीं है :)। –