2013-08-07 2 views
1

NHibernate를 사용하여 클래스를 매핑하고 있지만 두 개의 다른 데이터베이스에서 동일한 맵을 사용합니다. 이것은 Sybase Anywhere에서 작동하지만 SQLite에서는 작동하지 않습니다.매핑 : 데이터베이스의 기본값

이 내지도 클래스입니다 :

public FooMap() 
{ 
    Property(x => x.Date, map => 
    { 
     map.Column(c => c.Default("now(*)")); 
     map.Generated(PropertyGeneration.Insert); 
     map.NotNullable(true); 
    }); 
} 

이는 매퍼입니다 :

public class Provider 
{ 
    public void AddMappings(ModelMapper mapper) 
    { 
     mapper.AddMappings(Assembly.GetAssembly(typeof(BaseMap)).GetExportedTypes().Where(x => x.Name.EndsWith("Map"))); 
    } 
} 

SQLite는 지금 기능을 가지고 있지 않기 때문에, Hibernate는이 테이블을 만들려고 할 때이 오류가 발생할 수 .

데이터베이스에 따라 기본값을 삽입하려면 어떻게해야합니까?

var db = DependencyResolver.Current.GetService<Provider>(); 

if (db == null) 
{ 
    throw new NullReferenceException("Service Provider not found."); 
} 

if (db is SybaseProvider) 
{ 
    map.Column(c => c.Default("now(*)")); 
} 
else // SQLite 
{ 
    map.Column(c => c.Default("CURRENT_TIMESTAMP")); 
} 
map.Generated(PropertyGeneration.Insert); 
map.NotNullable(true); 

나를 위해 일했다 : 나는 StructureMapMVC을 사용하고

답변

0

그래서 내가 이런 짓을.

0

다른 데이터베이스가 datetime 기본값을 생성하는 데 다른 기능을 사용한다는 것을 염두에두면 객체 초기화시 값을 생성하는 방식을 사용합니다.

다음과 같은 해답의 일부가 Default Value does not work with DateTime and Fluent Nhibernate 1.2 포럼 스레드를보고 할 수 있습니다

그냥 처럼 당신을 할당, 속성/필드의 디폴트 값을 지정하는 방법 일반 필드 ; 필드 정의 나 엔터티의 생성자에서 설정하십시오. 아무 것도 필요하지 않습니다.

이 방법을 사용하면 datetime 기본값을 생성하는 방법에 대해 걱정하지 않고도 다른 데이터베이스에서 작업 할 수 있습니다.