2012-03-15 1 views
8

주입 된 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 부분의 새로운 속성이 완전히 무시되는 것처럼 보입니다 ...

답변

8

당신의 매핑이 이상하게 업데이트되지 않는 경우. app_data 폴더에서 mappings.bin을 삭제하고 응용 프로그램을 다시 시작하여 강제로 시도 할 수 있습니다. Orchard는 nhibernate 매핑을 다시 만들고 mappings.bin으로 저장해야합니다.

+2

그 정보에 감사 드리며, 여기에 매핑이 지속되고 있다는 것을 깨닫지 못했습니다. 이 파일을 지우고 모듈을 사용 불가능하게/사용 가능하게 설정하면 트릭을 만들었지 만 이것이 내가 찾던 해답을 확신하지는 못했다. :) 나는 내가 이런 식으로하고 오차드 프로세스를 우회하는지 궁금해하고 있나? –

+0

나는이 동일한 문제에 부딪치며 해결책이 효과적이라는 것을 알았지 만 @MikeSimmons처럼이 방법은이 방법을 이상한 방법으로 수행 할 수 있습니다. 이것이 진정으로 최선의 방법입니까? 참고 - Orchard 1.6을 사용하고 있습니다. – bigmac

+0

나는 과수원 1을 운영하고있다.10 'ContentPart'에 속성을 추가하고 매핑 파일을 삭제해야한다는 것을 알았습니다. 모듈을 출시하고 업그레이드하기가 어려울 수 있으므로 걱정입니다. – hsimah

2

나는 동일한 문제점에 부딪혔다. 나는 그것을 발견 할 수있는 유일한 방법은 mappings.bin (모듈을 비활성화하고 다시 활성화 할 필요가 없음)을 삭제하는 것이다. 사실 이것이 왜 일어 났는지 물었을 때 버트 랜드 (Bertrand)에서 얻은 대답입니다.

나는이 문제를 http://orchard.codeplex.com/workitem/19306에 기록했습니다. 만약 당신이 이것을 투표 할 수 있다면, 우리는 그것을 더 빨리 보게 될 것입니다.

0

이, 그것은 마이그레이션을 실행하기 전에 NHibernate에 매핑을 실행 내가 ... 난 당신이 모듈을 사용하도록 설정하면 것을보고하고보고하고 유사한 문제처럼 보인다 ..

https://orchard.codeplex.com/workitem/19603

조쉬