2012-05-18 76 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

相關問題