簡體   English   中英

流利的NHibernate復合鍵查詢

[英]Fluent NHibernate Composite Key Query

我是Fluent Nhibernate和.NET的新手。 因此,如果我的問題不清楚,請告訴我。

我在應用程序中有3張桌子,如下所示

表A

AID(PK),CreatedDate(PK),ZID,AFirstname,ALastname,AAddress,AZipCode

表B

CID(PK),AID(PK),Date(PK),Field1,Field2

表C

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM