我有两张桌子:
TableA (Id, Name, UpdateDate)
TableB (Id, TableAId, Amount)
我的域对象如下所示:
TableA
public virtual Guid Id {get;set;}
public virtual String Name {get;set;}
public virtual TableB TableB {get; set;}
TableB
public virtual Guid Id {get;set;}
public virtual decimal Amount {get;set;}
public virtual TableA TableA {get;set;}
我如何映射这些表,以便每当我查询TableA
时,如果有TableB
,我会在 Component(x => x.TableB,
m => m.References(x => x.TableA).Column("TableAId").Nullable());
中获得它的引用?
在我的TableA映射中:
{{1}}
答案 0 :(得分:0)
我认为这更合适
public virtual IList<TableB> TableB { get; set; }
因为TableB中的许多项可以引用TableA中的相同项。 对于映射,这应该工作:
public TableAMapping : ClassMap<TableA>
{
public TableAMapping()
{
// other struff
HasMany(x => x.TableB).Table("TableB").KeyColumn("TableAId");
}
}
对于TableB
public TableBMapping : ClassMap<TableB>
{
public TableBMapping()
{
// other struff
Reference(x => x.TableA)Column("TableAId");
}
}
<强>更新强>
1对1
HasOne(x => x.TableB).ForeignKey("TableAId");
答案 1 :(得分:0)
如果您使用Fluen Mapping,可以尝试这样:
public TableAMap()
{
Table("TableA");
Id(x=> x.Id).GeneratedBy.Assigned();
Map(x=> x.Name).Not.Nullable();
References(x => x.TableB, TableBId);
}
public TableBMap()
{
Table("TableB");
Id(x=> x.Id).GeneratedBy.Assigned();
Map(x=> x.Amount).Not.Nullable();
HasMany<TableA>(x => x.TableA)
.Nullable()
.KeyColumn("TableAId");
}
如果您想确保它是1比1,您可以使用“HasOne”代替参考文献。
答案 2 :(得分:0)
我想出了答案。使用我在问题中列出的确切模式,我能够像这样将TableA映射到TableB。
HasOne(x => x.TableB).PropertyRef(m => m.TableA).Cascade.All();