NHibernate OneToMany 代码映射

Posted

技术标签:

【中文标题】NHibernate OneToMany 代码映射【英文标题】:NHibernate OneToMany Mapping By Code 【发布时间】:2018-08-17 20:18:46 【问题描述】:

我在互联网上看到了很多关于使用 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。 同样出于设计目的,我永远不会查询用户以获取他的车辆列表,因此我的用户模型中不需要“车辆模型列表”。

如果您有任何提示,关于如何在我的 Map 类中映射它(看到很多 xml 映射,但我想通过代码映射它),将不胜感激。

谢谢

【问题讨论】:

感谢您的文档,不幸的是我已经阅读了它们,但它对我没有帮助。我也犯了一个错误,这是一个 OneToOne 关系我更新了我的帖子 【参考方案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)
        )
    

也许它可以帮助别人。

【讨论】:

以上是关于NHibernate OneToMany 代码映射的主要内容,如果未能解决你的问题,请参考以下文章

如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?

NHibernate 通过代码 ManyToOne 与 CompositeIdentity 进行映射

通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体

我在@OneToMany 休眠映射中遇到错误?

通过代码进行 Nhibernate 一对一映射

如何在 Hibernate 中创建 OneToMany 映射? [复制]