1

以下のクラス マッピングの何が問題になっていますか?

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 内の正しい曲線に属することを示す列は明らかにありませんが、マッピングを変更して 2 つの異なるポイントのセットを維持する方法がわかりません。

4

1 に答える 1

0

参照用に別の列を指定する必要があると思います。

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

編集:列-> KeyColumn

于 2012-05-18T21:52:53.550 に答える