NHibernate OneToMany按代码映射

时间:2018-03-09 09:39:39

标签: c# nhibernate mapping

我在互联网上看到很多关于映射关系对象与nhibernate的例子,但我不能让我的作品。

我有两个模型例如:

public class Vehicule
{
    public virtual int Id { get; set; }
    public virtual int Brand { get; set; }
    public virtual int Color { get; set; }
    public virtual int UserID { get; set; }
    public virtual UserModel User { get; set; }
}

public class VehiculeMap: ClassMapping<Vehicule>
{
    public VehiculeMap()
    {
        Table("G1Vehicule");

        Id(x => x.Id, map => { map.Column("id"); });
        Property(x => x.Brand, map => { map.Column("brand"); });
        Property(x => x.Color, map => { map.Column("color"); });
        Property(x => x.UserID, map => { map.Column("user_id"); });
    }
}

public class UserModel
{
    public virtual int Id { get; set; }
    public virtual int Username { get; set; }

}

public class UserModelMap : ClassMapping<UserModel>
{
    public UserModelMap()
    {
        Table("Users");

        Id(x => x.Id, map => { map.Column("id"); });
        Property(x => x.Username, map => { map.Column("username"); });
    }
}

以前,我只显示了UserId,但是现在我想从数据库中获取特定的VehiculeModel时填充我的UserModel。

这里我的模型关系是OneToOne。 同样出于设计目的,我永远不会查询用户获取他的车辆列表,所以我不需要在我的UserModel中有一个“VehiculeModel列表”。

如果你有任何提示,关于如何在我的Map类中映射它(看到很多xml映射,但我想通过代码映射)非常感谢。

由于

1 个答案:

答案 0 :(得分:1)

我终于成功了。 事实上,没有什么可复杂的,我只是忘了在Nhibernate的地图类列表中添加我的第二个模型(UserModelMap)。

public class VehiculeMap: ClassMapping<Vehicule>
{
    public VehiculeMap()
    {
        Table("G1Vehicule");

        Id(x => x.Id, map => { map.Column("id"); });
        Property(x => x.Brand, map => { map.Column("brand"); });
        Property(x => x.Color, map => { map.Column("color"); });
        Property(x => x.UserID, map => { map.Column("user_id"); });

        ManyToOne(x => x.User, map => {
            map.Column("user_id"),
            map.Fetch(FetchKind.Join),
            map.notFound(NotFoundMode.Ignore)
        })
    }
}

也许它可以帮助别人。