이미 온 포인트 응답이 있지만 나도 찾지 못해서 사과드립니다. 나는 NH3를 사용하고 있는데 클래스가 특정 인터페이스를 구현하는 엔티티에 Set을 추가하고자하는 유스 케이스가있다. 세션 빌더를 생성하기 전에 이러한 변경을 할 수 있도록 구성 빌더 클래스가 있습니다.런타임시 NHibernate 클래스 확장/수정
public class Person : IHasExtraItems
{
public Person()
{
this.ExtraItems = new HashSet<ExtraItem>();
}
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime Birthdate { get; set; }
public virtual ICollection<ExtraItem> ExtraItems { get; protected set; }
}
public class ExtraItem
{
public virtual Guid Id { get; set; }
}
그리고이 예제 매핑 :이 감소 예를 감안할 때
<class name="Person">
<id name="Id">
<generator class="guid"/>
</id>
<property name="Name"/>
<property name="Birthdate"/>
<set name="Extra" table="PersonExtraItems" cascade="all">
<key column="PersonId"/>
<many-to-many column="ExtraItemId" class="ExtraItem" unique="true" />
</set>
</class>
내가 투명 많은 클래스에이 기능을 적용 할 수 있기를 원하기 때문에
- 단지 인터페이스를 구현하여 - - 매핑에 "ExtraItem"을 넣고 싶지 않습니다. 대신 런타임에 추가하려고합니다. 그래서 XML 매핑에서 속성을 제거하면 런타임에 어떻게 추가 할 수 있습니까? http://ayende.com/Blog/archive/2008/05/01/Dynamic-Mapping-with-NHibernate.aspx을하지만 많은 세트에 많은 매핑되지 않으며, 나의 미약 한 뇌가 메모리를 해독 할 수 없었다 :이 내가 만들려고 노력하고있어 변화의 설명 정확히 유형의
매핑 표현 nhibernate는 효과를 생성하는 데 사용합니다. 키, 그러나 XML 매핑 버전의 작품 널 때문 디버거에 표시 속성 테스트에서
foreach (var cls in cfg.ClassMappings)
{
if (typeof(IHasExtraItems).IsAssignableFrom(cls.MappedClass))
{
NHibernate.Mapping.Property property = new NHibernate.Mapping.Property();
NHibernate.Mapping.Set value = new NHibernate.Mapping.Set(cls);
value.Role = cls.EntityName + ".ExtraItems";
value.IsGeneric = true;
var table = new Table();
table.Name = cls.MappedClass.Name + "ExtraItems";
value.CollectionTable = table;
value.GenericArguments = new Type[] { typeof(ExtraItem) };
value.IsOptimisticLocked = true;
value.IsLazy = true;
mappings.AddCollection(value);
property.Value = value;
property.Name = "ExtraItems";
property.PersistentClass = cls;
property.Cascade = "all";
cls.AddProperty(property);
}
}
일치하려고 노력을 기반으로, 내가 왔어요 가장 가까운,이 런타임 오류가 발생, 변경을 수행 할 때 어느 정도 동일하게 보입니다.
보너스 포인트 : 저는 조인 된 테이블이 필요하기 때문에 특별히 many-to-many를 원합니다. 이렇게하면 성능을 위해 실제 외래 키가있는 확장 데이터에 엔터티를 매핑 할 수 있습니다. ExtraItem은 실제로 엔티티가 아닌 값 유형이어야하지만 XML로 매핑하는 방법을 알아낼 수는 없습니다.
보너스 포인트, 파트 2 : conforM으로이 작업을 수행 할 수 있습니까? 기존의 모든 매핑을 conforM으로 전환하고 싶지 않아서 기존의 XML 매핑과 conforM을 섞어서 기존 매핑을 수정하는 방법을 찾지 못했습니다. Fluent는 또 다른 옵션이지만, NH3를 사용하고 있으며 Fluent가 아직 지원하지 않는다고 생각합니다.
미리 감사드립니다.
EDIT 나는 세트의 요소를 정의하지 않는다는 것이 확실합니다. 그러나, 나는 세트의 요소들을 적절하게 정의하는 방법을 식별 할 수 없다.