주입 된 IRepository를 사용하여 Orchard DB에서 직접 데이터를 검색하고 푸시하는 사용자 정의 모듈을 작성하고 있습니다.과수원 CMS - 마이 그 레이션 후 새 특성이 업데이트되지 않습니다.
콘텐츠 부분을 업데이트해야만 정상적으로 작동합니다. 마이그레이션 클래스에 업데이트를 추가하고 업데이트 (DB 스키마가 기본값으로 업데이트 됨)가 실행되지만 IRepository를 통해 새 값을 업데이트 할 수는 없습니다. 나는 NHibernate로 내려와야 만합니다. 변화를 통해 플러시합니다.
새로 만든 레서피에서 모두 잘 작동합니다. 부품을 바꿀 때만 적용됩니다.
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"를 추가
가 DB에 표시하지만 난 오차드 조리법을 다시 때까지 내가 (를 업데이트 할 수 없습니다 : 여기에 키 코드 조각입니다 bl_ 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에 "수정"입니다 : 여기
내가 업데이트하려고 방법
조금 kludgey 것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();
...
건배. 난 아직 더 많은 테스트 후 오차드에게 1.3.9
PPS를 실행 해요
추신은 NHibernate에 수정은 그래서 아마 내 최초의 연구 결과는 붉은 청어했다, 지금 작동이 중지되었습니다. 비록 객체 정의가 어딘가에 캐시되어있는 것처럼, 업데이트/검색 할 때 NHibernate에 의해 content 부분의 새로운 속성이 완전히 무시되는 것처럼 보입니다 ...
그 정보에 감사 드리며, 여기에 매핑이 지속되고 있다는 것을 깨닫지 못했습니다. 이 파일을 지우고 모듈을 사용 불가능하게/사용 가능하게 설정하면 트릭을 만들었지 만 이것이 내가 찾던 해답을 확신하지는 못했다. :) 나는 내가 이런 식으로하고 오차드 프로세스를 우회하는지 궁금해하고 있나? –
나는이 동일한 문제에 부딪치며 해결책이 효과적이라는 것을 알았지 만 @MikeSimmons처럼이 방법은이 방법을 이상한 방법으로 수행 할 수 있습니다. 이것이 진정으로 최선의 방법입니까? 참고 - Orchard 1.6을 사용하고 있습니다. – bigmac
나는 과수원 1을 운영하고있다.10 'ContentPart'에 속성을 추가하고 매핑 파일을 삭제해야한다는 것을 알았습니다. 모듈을 출시하고 업그레이드하기가 어려울 수 있으므로 걱정입니다. – hsimah