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年开始的,所以事情可能已经改变了。。。