nhibernate가 사용중인 사이트를 개발 중입니다. 그것은 정적 매핑을 위해 잘 작동합니다. 하지만 문제는 내가 기존의 데이터베이스 에이 응용 프로그램을 적용합니다. 그래서 런타임에 클래스의 매핑이 일어난다. 나는 사용자가 매핑을 위해 테이블과 컬럼 이름을 제공한다는 것을 의미한다. 감사합니다런타임시 Nhibernate 매핑
2
A
답변
0
NHibernate 함께있을 수 있다고 생각하지 않지만 해결 방법을 사용할 수 있습니다. NHibernate 매핑 대신 테이블을 사용할 수 있습니다.
런타임에 필요한 특정 사용자 매핑을 사용하여 해당보기를 만들거나 업데이트 할 수 있습니다.
예를 들어, NHibernate의 매핑을 ViewMapped
이라는 두 개의 열 Name
및 Mail
이있는 뷰로 정의합니다. 그리고 다른 한편으로 사용자는 세 개의 열 Name
, SecondName
, EMail
을 가진 테이블을 가지고 있습니다. 나는 그 당신을하는 데 도움이, 또는 적어도 솔루션을 안내하겠습니다
(SELECT Name + ' ' + SecondName as Name, EMail as Mail FROM tableName) AS ViewMapped
: 다음과 같은 선택과 실행에보기를 만들 수 있습니다.
2
당신의 질문에서 나는 POCO 클래스가 존재하지만 당신은 빌드시 테이블이나 컬럼 이름을 알지 못한다고 해석합니다.
이public class MyGenericClass
{
public virtual long Id { get; set; }
public virtual string Title { get; set; }
}
당신은 런타임에 테이블과 컬럼에 바인딩 수 : 당신은 이미이 클래스가 있다면
그래서,
string tableName; // Set somewhere else by user input
string idColumnName; // Set somewhere else by user input
string titleColumnName; // Set somewhere else by user input
var configuration = new NHibernate.Cfg.Configuration();
configuration.Configure();
var mapper = new NHibernate.Mapping.ByCode.ModelMapper();
mapper.Class<MyGenericClass>(
classMapper =>
{
classMapper.Table(tableName);
classMapper.Id(
myGenericClass => myGenericClass.Id,
idMapper =>
{
idMapper.Column(idColumnName);
idMapper.Generator(Generators.Identity);
}
);
classMapper.Property(c => c.Title,
propertyMapper =>
{
propertyMapper.Column(titleColumnName);
}
);
}
);
ISessionFactory sessionFactory = configuration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
////////////////////////////////////////////////////////////////////
// Now we can run an SQL query over this newly specified table
//
List<MyGenericClass> items = session.QueryOver<MyGenericClass>().List();
나는 당신이 그것을 위해 NHibernate에 사용할 수 있다고 생각하지 않습니다. 나는 사용자가 컴파일 된 객체를 채우기위한 매핑을 만드는 방법을 보여 주면 모든 데이터베이스 필드를 매핑하기 위해 NHibernate를 사용하고자한다고 가정합니다. 하지만 네가 할 수 있다고 생각하지 않아. 그러나보기를 사용하여 해결 방법이있을 수 있다고 생각합니다. 나는 대답에 그것을 게시 할 것이다. – frikinside
Andrew Shepherd가 언급 한 것처럼 POCO 클래스가 존재하지 않는 한 동적 인 것을 지원하는 ORM이 필요합니다. 좋은 예가 있습니다 : http://www.toptensoftware.com/Articles/104/PetaPoco-Not-So-Poco-or-adding-support-for-dynamic – playful