我在這裏遇到了一個小問題,我需要在NHibernate中映射count()列。 我在NHibernate上真的很糟糕,但這是我需要解決的任務。流利的NHibernate映射SQL Count()列
對不起,我將在這裏發佈的代碼中的瑞典語,這是一個原來只有瑞典語的舊數據庫。但是,真的,你只需要看第一行。但爲了以防萬一,我發佈了全部內容。
SELECT COUNT(Matpunkt.id_matpunkt) AS [Count],
f.ID_Företag,
f.Namn,
f.Adress,
f.Postnummer,
f.Postadress,
f.Tele,
f.Orgnummer,
f.Typ,
f.Logo,
f.Fax,
f.Mallkatalog,
f.Tidszon,
u.Ansvarigtkontor AS [AnsvKontor]
FROM Matpunkt
INNER JOIN MatpunktInstrumentParameter ON Matpunkt.id_matpunkt = MatpunktInstrumentParameter.id_matpunkt
INNER JOIN Uppdrag u ON Matpunkt.id_uppdrag = u.ID_Uppdrag
INNER JOIN Företag f ON u.Ansvarigtkontor = f.ID_Företag
WHERE MatpunktInstrumentParameter.tid_ner IS NULL
GROUP BY f.ID_Företag, f.Namn, f.Adress, f.Postnummer, f.Postadress, f.Tele, f.Orgnummer, f.Typ, f.Logo, f.Fax, f.Mallkatalog, f.Tidszon, u.Ansvarigtkontor
ORDER BY [Count] desc
此外,我不知道我是否應該使用AS [Count]
或AS 'Count'
。 甚至SELECT COUNT(*)
,而不是我使用的,或者,如果我甚至需要使用別名,所有在一起...是啊,我不知道什麼是在SQL中的最佳做法。說實話,我沒有寫這個查詢。它最初在webforms asp:SqlDataSource元素中。但現在整個網站,但這一個是「升級」使用MVC和AngularJS。我的同事們正在度假,我只是在這裏問你。
這裏是映射類:
public CompanyMap()
{
Table("[Företag]");
Id(x => x.ID, "ID_Företag").Access.PascalCaseField(Prefix.Underscore);
Map(x => x.Name, "Namn").Not.Nullable();
Map(x => x.Address, "Adress");
Map(x => x.ZipCode, "Postnummer");
Map(x => x.PostAddress, "Postadress");
Map(x => x.PhoneNumber, "Tele");
Map(x => x.CorporateIdentityNumber, "Orgnummer");
Map(x => x.Type, "Typ");
Map(x => x.Logo, "Logo");
Map(x => x.Fax, "Fax");
References(x => x.Office, "AnsvKontor").Nullable();
Map(x => x.TemplateFolder, "Mallkatalog");
Map(x => x.TimeZone, "Tidszon").Nullable();
Map(x => x.Count, "Count");
HasMany<User>(x => x.Users).KeyColumn("ID_Företag");
}
在這裏很好地混合瑞典語和英語,但你只需要看看,說Map(x => x.Count, "Count");
行。 編輯:類似於最後一行的原因是,如果您想知道爲什麼他們在那裏並且沒有被我使用過,則該類用於網站上的幾個不同的事情。
僅供參考此映射在沒有該行的情況下工作。但是,我只是在Count
上得到空回。
[
{
"id": 1,
"name": "dummytext - Stockholm",
"address": "dummytext 34",
"zipCode": "123 45",
"postalAddress": "Stockholm",
"phone": "123456789",
"corporateIdentityNumber": "123456-789",
"count": null
},
是啊我不想給你真實的數據......我想你會明白的。 而且因爲我不擅長NHibernate和我只是添加東西給了非常大的解決方案,我不知道我是否需要添加此行的位置:
public static void Create()
{
Mapper.CreateMap<Company, CompanyViewModel>()
.ForMember(vm => vm.PostalAddress, cfg => cfg.MapFrom(c => c.PostAddress))
.ForMember(vm => vm.Phone, cfg => cfg.MapFrom(c => c.PhoneNumber))
.ForMember(vm => vm.Count, cfg => cfg.MapFrom(c => c.Count));
}
}
最後例外:
Invalid column name 'Count'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Invalid column name 'Count'.
而且堆棧跟蹤:
而且我想說,如果你問我複雜的事情有關NHibernate的我未必能回答最後一件事你,就像「你爲什麼不這樣做,而不是Bla bla?」。出於上述原因,我無法明確回答。
感謝您提前閱讀這篇長篇文章!
計數列是否存在於您的表中,您嘗試使用流暢的nhibernate進行映射? – jtabuloc
@JTC不,它不。該查詢告訴我們公司中每個辦公室有多少個測量點。所以它創建一個名爲「Count」的計數器。 –
我認爲你不應該試圖映射這個,但只是寫一個NHibernate的查詢... –