[英]Fluent NHibernate Composite Key Query
我是Fluent Nhibernate和.NET的新手。 因此,如果我的問題不清楚,請告訴我。
我在應用程序中有3張桌子,如下所示
AID(PK),CreatedDate(PK),ZID,AFirstname,ALastname,AAddress,AZipCode
CID(PK),AID(PK),Date(PK),Field1,Field2
CID(PK),CNAME
如果我錯了,請糾正我。 我的模型類如下所示。
public class A {
public A() {}
public virtual long AID { get; set; }
public virtual int ZID { get; set; }
public virtual DateTime CreatedDate { get; set; }
public virtual string AFirstName { get; set; }
public virtual string ALastName { get; set; }
public virtual string AZip { get; set; }
public virtual string AAddress { get; set; }
}
MapperClass A級
public class AMap : ClassMap<A> {
public AMap() {
Table("A");
CompositeId().KeyProperty(x => x.AID, "AID").KeyProperty(x => x.CreatedDate, "CreatedDate");
Map(x => x.ZID).Column("ZID").Not.Nullable();
Map(x => x.AFirstName).Column("AFirstname").Not.Nullable();
Map(x => x.ALastName).Column("ALastname").Not.Nullable();
//Same as above for Address and ZipCode
}
}
我的B模型課程如下所示
public class B{
public B() { }
public virtual long AID { get; set; }
public virtual int CID { get; set; }
public virtual DateTime Date { get; set; }
public virtual string Field1 {get; set; }
public virtual string Field2 {get; set; }
}
B類的映射器類
public class BMap : ClassMap<B> {
public BMap() {
Table("B");
CompositeId().KeyProperty(x => x.AID, "AID").KeyProperty(x => x.CID, "CID").KeyProperty(x => x.Date, "Date");
Map(x => x.Field1).Column("Field1").Not.Nullable();
//Same for Field2
}
}
我的表C模型類如下所示。
public class C{
public C() { }
public virtual int C{ get; set; }
public virtual string Cname{ get; set; }
}
MapperClass C類
public class C: ClassMap<C> {
public C() {
Table("C");
Id(x => x.CID).GeneratedBy.Identity().Column("CID");
Map(x => x.CName).Column("Cname").Length(64);
}
}
現在,許多人可能會認為表設計不合適。 但是,此時此刻什么也做不了,而且肯定會降低性能,但我想我們不得不忍受一段時間。
現在,我需要一些幫助來編寫所有三個表的映射。 我還可以使用Criteria API為此編寫一個查詢,以連接所有3個表。
在我的應用程序中,我從另一個函數獲取ZID。 現在,根據ZID,我需要獲取AFirstName,ALastName,Field1,Field2,CName。 這怎么可能?
請幫忙。 如果問題仍然不清楚,請讓我知道。
提前致謝。
用對原始屬性的引用替換ID,以便您可以瀏覽它們
public class B
{
public virtual A A { get; set; }
public virtual C C { get; set; }
public virtual string Field1 {get; set; }
public virtual string Field2 {get; set; }
}
public class BMap : ClassMap<B>
{
public BMap()
{
Table("B");
CompositeId()
.KeyReference(x => x.A, "AID", "Date")
.KeyReference(x => x.C, "CID");
Map(x => x.Field1, "Field1").Not.Nullable();
Map(x => x.Field2, "Field2").Not.Nullable();
}
}
// query for it
var results = session.CreateCritera<B>()
.JoinAlias("A", "a")
.JoinAlias("C", "c")
.SetProjection(Projections.List()
.Add(Projections.Property("Field1"), "Field1")
.Add(Projections.Property("Field2"), "Field2")
.Add(Projections.Property("a.CreatedDate"), "Date")
.Add(Projections.Property("c.Name"), "CName"))
.SetResulttransformer(Transformers.AliasToBean<YourDto>())
.List<YourDto>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.