C# nhibernate通过代码方法映射,映射对象

C# nhibernate通过代码方法映射,映射对象,c#,.net,nhibernate,C#,.net,Nhibernate,我有下面的型号 public class Car : Entity<int> { public virtual int Id{ get; set; } ... public virtual Engine Engine { get; set; } } 如何在此CarMap对象中映射引擎 使用Fluent NH,我会使用References(),它显然有一个ManyToOne()。你需要更多的信息来回答这个问题,但这里有几个选项 这真的是一对一的关系吗?一对一

我有下面的型号

public class Car : Entity<int>
{
    public virtual int Id{ get; set; }
    ...
    public virtual Engine Engine { get; set; }

}
如何在此CarMap对象中映射引擎


使用Fluent NH,我会使用
References()
,它显然有一个
ManyToOne()

你需要更多的信息来回答这个问题,但这里有几个选项

这真的是一对一的关系吗?一对一的关系有点独特,因为关系的双方都倾向于共享相同的Id。正如大卫·奥斯本所说,你很可能想要一对多的关系。但你希望它是双向的?i、 e.您可以从发动机向下导航到可能有该发动机的所有汽车,或从汽车向上导航到特定发动机。i、 引擎是克莱斯勒半引擎5.7L,它是在汽车,公羊皮卡,道奇杜兰戈,道奇充电器

然后,您可能希望像这样映射对象

public class Engine : Entity<int>
{
    public Engine()
    {
        Cars = new List<Car>();
    }

    public virtual int Id { get; protected set; }
    public virtual decimal Displacement { get; set; }
    //more properties

    public virtual IList<Car> Cars { get; }

    public virtual void AddCar(Car car)
    {
        if (Cars.Contains(car)) return;

        Cars.Add(car);
    }

    public virtual void RemoveCar(Car car)
    {
        if (!Cars.Contains(car)) return;

        Cars.Remove(car);
    }
}

public class Car : Entity<int>
{
    public virtual int Id { get; set; }
    public virtual Engine Engine { get; set; }

}
        ManyToOne(x => x.Engine, map =>
        {
            map.Column("EngineId");
            map.NotNullable(true); // if you require the Engine to be in a car
        });
而关系的另一面就是这样

public class Engine : Entity<int>
{
    public Engine()
    {
        Cars = new List<Car>();
    }

    public virtual int Id { get; protected set; }
    public virtual decimal Displacement { get; set; }
    //more properties

    public virtual IList<Car> Cars { get; }

    public virtual void AddCar(Car car)
    {
        if (Cars.Contains(car)) return;

        Cars.Add(car);
    }

    public virtual void RemoveCar(Car car)
    {
        if (!Cars.Contains(car)) return;

        Cars.Remove(car);
    }
}

public class Car : Entity<int>
{
    public virtual int Id { get; set; }
    public virtual Engine Engine { get; set; }

}
        ManyToOne(x => x.Engine, map =>
        {
            map.Column("EngineId");
            map.NotNullable(true); // if you require the Engine to be in a car
        });

如果您只想从汽车到发动机的单向映射,只需删除对汽车列表的所有引用,并删除行李映射。

您确定它是多个而不是一个吗?我没有使用代码映射,我只是按照链接文章所说的做。这是从2012年开始的,所以事情可能已经改变了。。。