2012-05-18 75 views
1

我的类映射下面有什么问题?对多个HasMany关系中的表格流畅的NHibernate映射

public class Foo 
{ 
    public Foo() 
    { 
     ActualCurve = new List<Point>(); 
     TargetCurve = new List<Point>(); 
    } 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Point> ActualCurve { get; set; } 
    public virtual IList<Point> TargetCurve { get; set; } 
} 

public class Point 
{ 
    public virtual int Id { get; set; } 
    public virtual double X { get; set; } 
    public virtual double Y { get; set; } 
} 

public class FooMapping() : ClassMap<Foo> 
{ 
    Table("Foos"); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.Name).Not.Nullable(); 
    HasMany(x => x.ActualCurve).Cascade.All(); 
    HasMany(x => x.TargetCurve).Cascade.All(); 
} 

public class PointMapping() : ClassMap<Point> 
{ 
    Table("Points"); 
    Not.LazyLoad(); 
    Id(x => x.Id).GeneratedBy.Identity(); 
    Map(x => x.X).Not.Nullable(); 
    Map(x => x.Y).Not.Nullable(); 
} 

这些映射产生

CREATE TABLE [dbo].[Foos](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar] NOT NULL, 
    [RecipeRevisionId] [int] NOT NULL 

CREATE TABLE [dbo].[Points](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [X] [float] NOT NULL, 
    [Y] [float] NOT NULL, 
    [FooId] [int] NOT NULL 

本质上说,问题是,当我拉着坚持Foo对象背出数据库中,Foo.ActualCurve和Foo.TargetCurve列出都得到填充这两个列表的组合内容。显然没有一列指出Foo内的哪些点属于正确的曲线,但我不知道如何更改映射以维护两组不同的点。

+0

是不是你不必映射表流利的点上课。为什么不使用内置功能? –

回答

0

我认为你需要指定引用一个单独的列:

HasMany(x => x.ActualCurve).Cascade.All().KeyColumn("ActualCurveId"); 
HasMany(x => x.TargetCurve).Cascade.All().KeyColumn("TargetCurveId"); 

编辑:列 - > KeyColumn

相关问题