FluentNHibernate를 자동 매핑과 함께 사용합니다. 사용자 지정 규칙이나 변경 내용이 사용되지 않습니다. NHibernate와 FluentNHibernate 어셈블리는 모두 최신 버전이다.FluenNibernate .Formula ("...") 작동하지 않습니다.
public abstract class Unit
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Employee : Unit
{
public Employee()
{
this.Groups = new List<Group>();
}
public virtual IList<Group> Groups { get; private set; }
}
public class Group : Unit
{
public Group()
{
this.Employees = new List<Employee>();
}
public virtual int EmployeesCount { get; set; }
public virtual IList<Employee> Employees { get; private set; }
}
public class GroupAutoMappingOverride : IAutoMappingOverride<Group>
{
public void Override (AutoMapping<Group> mapping)
{
mapping.Map(g => g.EmployeesCount).Formula("count(*)");
}
}
I 자동 스키마를 생성 : 데이터베이스 나는 다음과 같은 엔티티 (계층 당 테이블)를 사용하려고 sqlite3를
입니다.
create table "Unit" (
Id integer,
TypeId TEXT not null, //discriminator column
Name TEXT,
primary key (Id)
)
create table EmployeesToGroups (
Employee_id INTEGER not null,
Group_id INTEGER not null
)
내가 자동 매핑을 생성 체크 아웃 : 모든 괜찮
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="App.Models.Entities.Unit, App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Unit`">
<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="identity" />
</id>
<discriminator type="String">
<column name="TypeId" />
</discriminator>
<property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Name" />
</property>
<subclass name="App.Models.Entities.Employee, App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<bag access="backfield" name="Groups" table="GroupToEmployee">
<key>
<column name="Employee_id" />
</key>
<many-to-many class="App.Models.Entities.Group, App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="Group_id" />
</many-to-many>
</bag>
</subclass>
<subclass name="App.Models.Entities.Group, App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<bag access="backfield" inverse="true" name="Employees" table="EmployeeToGroup">
<key>
<column name="Group_id" />
</key>
<many-to-many class="App.Models.Entities.Employee, App, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="Employee_id" />
</many-to-many>
</bag>
<property name="EmployeesCount" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="EmployeesCount" />
</property>
</subclass>
</class>
</hibernate-mapping>
흠 .. 아니 공식을 ... 그리고 내가 그룹에서 모든 레코드를 얻을 수하려고 할 때 예외를 얻을 :
SQLite error
no such column: group0_.EmployeesCount
생성 된 쿼리는 잘못된 것입니다 :
NHibernate: select group0_.Id as Id6_, group0_.Name as Name6_, **group0_.EmployeesCount** as Employee9_6_ from "Unit" group0_ where group0_.TypeId='App.Models.Entities
.Group'
,
무엇이 잘못 되었나요? 그리고 그것은 일하기로되어 있습니까?
탱크에서 당신을 찍은! 그것은 나를 위해 놀랍지 만 당신 말이 맞습니다! 설치 방법을 비슷하게 설정했지만 문제는 내 엔티티가 하나의 AppDomain에 있지만 구성을 다른 구성으로 만듭니다. 따라서 유형 평등 비교 (IAutoMappingOverride의 일반 기반)는 항상 거짓입니다. 도움을 주셔서 감사합니다. – ILya