我不确定如何在给定的实体下面进行映射。
以下是表格。
Employee { ID, Name, Role_ID } (Role_ID is foreign key from Role table)
Role {Role_ID, Name }
以下是课程:
class Employee
{
public virtual string ID { get; set; }
public virtual string Name { get; set; }
public virtual Role EmpRole { get; set; }
}
class Role
{
public virtual string RoleID { get; set; }
public virtual string Name { get; set; }
}
以下是映射:
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("Employee");
Id(x => x.ID, "ID");
Map(x => x.Name, "NAME");
//for relationship not sure which mapping to be used???
}
}
public class RoleMap : ClassMap<Role>
{
public RoleMap()
{
Table("Role");
Id(x => x.RoleID, "ROLE_ID");
Map(x => x.RoleID, "ROLE_ID");
Map(x => x.Name, "ROLE_NAME");
//For relationship not sure what to be used????
}
}
场景:一个员工将拥有一个角色。可以将一个角色分配给多个员工。
请建议我如何写两个实体的关系?
答案 0 :(得分:0)
您正面临最常见的情况。在这种情况下,映射为many-to-one
,其流利用 .References()
public EmployeeMap()
{
Table("Employee");
Id(x => x.ID, "ID");
Map(x => x.Name, "NAME");
References(x => x.EmpRole , "Role_ID");
}
最佳概述(我知道)可在此处获取:
Adam Bar的令人惊讶的是,这篇文章不是关于流畅的NHibernate,而是关于按代码映射。然而,下半年与流利相比 - 并提供真正全面的overivew。小片段:
References(x => x.PropertyName, "column_name")
.Class<ClassName>()
.Cascade.SaveUpdate()
.Fetch.Join()
.Update()
.Insert()
.ReadOnly()
.Access.Field()
.Unique()
.OptimisticLock()
.LazyLoad(Laziness.Proxy)
.PropertyRef(x => x.PropertyRef)
.NotFound.Ignore()
.ForeignKey("column_fk")
.Formula("arbitrary SQL expression")
.Index("column_idx")
.Not.Nullable()
.UniqueKey("column_uniq");
如果你要搜索NHibernate doc(流利的操作在它上面)你应该检查:
如果你想要Fluent-NHibernate doc:
最后,如果您想查看哪些员工属于每个角色,您可以扩展您的POCO:
class Role
{
public virtual string RoleID { get; set; }
public virtual string Name { get; set; }
public virtual IList<Employee> Employees { get; set; }
}
并将其映射为<bag>
。
HasMany(x => x.Employees)
.KeyColumn("Role_ID")
.Inverse()
.BatchSize(25)
请参阅:
one-to-many
的NHibernate doc)