के बाद अपडेट नहीं कर रहे हैं मैं एक कस्टम मॉड्यूल लिख रहा हूं जो इंजेक्शन आईआरपीोजिटरी का उपयोग करके ऑर्चर्ड डीबी से सीधे डेटा को पुनर्प्राप्त और धक्का देता है।ऑर्चर्ड सीएमएस - नए गुण माइग्रेशन
यह तब तक ठीक काम करता है जब तक मुझे सामग्री भाग को अपडेट करने की आवश्यकता न हो। मैं अपने माइग्रेशन क्लास में एक अपडेट जोड़ता हूं और अपडेट (डीबी स्कीमा डिफ़ॉल्ट मानों के साथ अपडेट किया जाता है) के माध्यम से चलता है, हालांकि मैं आईरिपॉजिटरी के माध्यम से किसी भी नए मान को अपडेट नहीं कर सकता। मुझे परिवर्तनों को फ्लश करने के लिए NHibernate.ISession में गिरा देना है।
यह सब एक नव निर्मित नुस्खा पर ठीक काम करता है, यह केवल तब होता है जब मैं एक हिस्सा बदलता हूं।
public class TranslationsPartRecord : ContentPartRecord
{
internal const string DefaultProductName = "Product";
public TranslationsPartRecord()
{
ProductName = DefaultProductName;
}
public virtual string ProductName { get; set; }
}
public class TranslationsPart : ContentPart<TranslationsPartRecord>
{
public string ProductName
{
get { return Record.ProductName; }
set { Record.ProductName = value; }
}
}
public class TranslationsHandler : ContentHandler
{
public TranslationsHandler(IRepository<TranslationsPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
public class Migrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("TranslationsPartRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column("ProductName", DbType.String, column => column.NotNull().WithDefault(TranslationsPartRecord.DefaultProductName))
);
return 1;
}
public int UpdateFrom1()
{
SchemaBuilder.AlterTable("TranslationsPartRecord", table => table.AddColumn("ProductDescription", DbType.String, column => column.NotNull().WithDefault(TranslationsPartRecord.DefaultProductDescription)));
return 2;
}
}
जब मैं के बाद अद्यतन कॉलम चलाया जाता है, इस उदाहरण में दूसरी संपत्ति "ProductDescription" जोड़ने डीबी में दिखाई देते हैं, लेकिन मैं उन्हें अद्यतन नहीं कर सकते जब तक मैं ऑर्चर्ड नुस्खा पुन: (: यहाँ कुंजी कोड के टुकड़े कर रहे हैं ब्लैप App_Data और फिर से शुरू करें)।
यहाँमैं कैसे अद्यतन करने के लिए कोशिश कर रहा हूँ है:
// ctor
public AdminController(IRepository<TranslationsPartRecord> translationsRepository)
{
_translationsRepository = translationsRepository;
}
[HttpPost]
public ActionResult Translations(TranslationsViewModel translationsViewModel)
{
var translations = _translationsRepository.Table.SingleOrDefault();
translations.ProductName = translationsViewModel.ProductName;
translations.ProductDescription = translationsViewModel.ProductDescription;
_translationsRepository.Update(translations);
_translationsRepository.Flush();
}
और यहाँ NHibernate "ठीक" है:
var session = _sessionLocator.For(typeof(TranslationsPartRecord));
var translations = _translationsRepository.Table.SingleOrDefault();
// is translations.Id always 1?
var dbTranslations = session.Get<TranslationsPartRecord>(translations.Id);
dbTranslations.ProductName = translationsViewModel.ProductName;
dbTranslations.ProductDescription = translationsViewModel.ProductDescription;
session.Update(dbTranslations);
session.Flush();
जो थोड़ा kludgey लगता है ...
चीयर्स।
ps मैं अभी भी अधिक परीक्षण के बाद ऑर्चर्ड 1.3.9
पी पी एस चल रहा हूँ, NHibernate ठीक अब काम करना बंद कर दिया है, इसलिए शायद मेरी प्रारंभिक निष्कर्षों एक रेड हेरिंग थे। ऐसा प्रतीत होता है कि सामग्री भाग पर नई गुणों को एनएचबीर्नेट द्वारा पूरी तरह से अनदेखा किया जाता है जब अद्यतन/पुनर्प्राप्ति होती है - हालांकि ऑब्जेक्ट परिभाषा कहीं कैश की जाती है ...
उस जानकारी के लिए धन्यवाद, यह नहीं पता था कि मैपिंग यहां जारी रहे थे। इस फ़ाइल को हटाने, फिर मॉड्यूल को अक्षम/सक्षम करने से चाल चल रही थी, हालांकि यह विश्वास नहीं था कि यह वह उत्तर है जिसे मैं ढूंढ रहा हूं :) मैं बस सोच रहा हूं कि क्या मैं इस तरह से ऑर्चर्ड प्रक्रिया को रोक रहा हूं? –
मैंने पाया कि मैं इस मुद्दे पर चल रहा हूं, और आपका समाधान काम करता है, लेकिन बस @ माइकसिमन्स की तरह, मुझे यह तरीका यह पूरा करने का एक अजीब तरीका लगता है। क्या यह वास्तव में सबसे अच्छी विधि है? एफवाईआई - मैं ऑर्चर्ड 1.6 का उपयोग कर रहा हूं। – bigmac
मैं ऑर्चर्ड 1 चला रहा हूं।10 और बस मेरे 'ContentPart' में एक संपत्ति जोड़ा और पाया कि मुझे मैपिंग फ़ाइल को भी हटाना पड़ा। यह एक चिंता है, क्योंकि मैं अपना मॉड्यूल जारी करना चाहता हूं और इससे उन्नयन मुश्किल हो जाएगा। – hsimah