最近準備把背景管理系統重新設計開發下,使用了bootstrap,在網上找了個漂亮的背景模闆:sb2-admin,在使用中遇到了不少問題,總結下,以免以後忘記。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLxMDMxAzNxgDNyAjMxUDMvwlMxQTMwIzLcFzN4QzLcd2bsJ2Lc12bj5ycn9Gbi52YuAzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
1、EF5利用NuGet更新到EF6後,一些Attribute沖突[未解決]:
我原先的資料驅動使用的是Fluent Nhibernate +Nhibernate+MSSQL2005,本來想玩玩EF的,而且現在新建立的MVC項目模闆中,都會自帶EF。因為EF5不支援項目模闆生成Code First,是以更新到了EF6,設定到更新以後麻煩來了。“System.ComponentModel.DataAnnotations” 這個命名空間同時存在于2個dll中,原先我的想法很簡單,我不引用就好了,可删除引用後,還是提示沖突。後來我想可能是webconfig或者package中有問題,可查了半天還是沒有問題。群裡的朋友說是緩存的問題,重新開機了iisexpress,重新開機了電腦,都沒有辦法解決,實在沒有辦法,放棄了EF方式,還是使用了原先的資料驅動。(PS:哪位大俠有解決方案的,可以留言下,主要沖突是TableAttribute等一些标記性特性)
2、FluentNhibernate 不支援存儲過程
一直以為沒有使用FN進行存儲過程的操作,這次因為背景首頁想統計下資料,就利用了存儲過程,但在使用中卻發現FN目前還不支援存儲過程(點選檢視官方),沒有辦法,隻能利用Fluent Configuration和HBM Configuration混合的映射方式。
這裡要注意的是:
a)存儲過程傳回的資料,最好重新定義一個class,并且進行映射(可以使用FN或者HDM方式)
b)把新定義的class和映射的hbm檔案,放到你的Model層,這是為了友善以後的管理。
c)映射存儲過程的hdm檔案名,以傳回類型的名稱命名。(如果傳回的class命名為:DataResult,hbm的檔案名為:DataResult.hbm.xml)
class:
public class TravelDefaultData
{
public virtual int UserCount { get; set; }
public virtual int OrderCount { get; set; }
public virtual int LineCount { get; set; }
public virtual int CrusiseCount { get; set; }
}
hbm:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Travel.Domain" namespace="Bus.Travel">
<sql-query name="GetTravelData">
<return class="TravelDefaultData">
<return-property column="usercount" name="UserCount" />
<return-property column="ordercount" name="OrderCount" />
<return-property column="linecount" name="LinCrusiseCount" />
</return> EXEC [GetTravelData] :userStartDate, :orderStartDate, :lineStartDate, :crusiesStartDate </sql-query>
</hibernate-mapping>
TravelDefaultData的映射,可以參考這裡。
最後記得配置下混合映射:
var db = Fluently.Configure()
.Database(GetSqlConfig())
.Mappings(a =>
{
a.FluentMappings.AddFromAssemblyOf<AreaMap>();
a.HbmMappings.AddClasses(typeof(TravelDefaultData));
});
return db.BuildSessionFactory();
配置以後就能按照NHibernate的方式進行使用了。
3、在使用Web Api的時候,傳回類型序列化沖突:
因為用的新模闆很炫,想把資料請求都使用Web Api來進行,但在使用的時候,傳回的json資料中,都傳回了<字段名>k_BackingField,這下傻了,檢視了文檔,說在屬性或者字段标記中,使用DataContactAttribute和DataMemberAttribute,試了以後,發覺還是不行。
後來通過Google後,才知道,原來是SerializableAttribute和DataContractAttribute之間的問題,傳回Json資料的時候,使用SerializableAttribute的方式進行序列化了,是以我們必須在Application_Start時,配置下,讓其在序列化的時候,僅僅使用Web Api Json serialization(僅僅支援DataContact和DataMember)。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//配置在webpi的時候,僅僅支援DataContact
var serializerSettings =GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var contractResolver =(DefaultContractResolver)serializerSettings.ContractResolver;
contractResolver.IgnoreSerializableAttribute = true;
}
寫在最後
之前一直感覺用百度就足夠了,但現在看來,在技術方面的查詢,還是Google比較給力,這些問題很多都是靠Google解決的。最近因為Vpn到期了,是以一直沒有用Google,最近實在憋不住,重新買了個Vpn,用下來不錯,價格也不貴,大家可以用下:用力敲。可以利用360浏覽器,進行自動切換模式,很友善。方法點選檢視。
QQ:785418
微信:jamesying1
QQ群:376248054 通關:cnblogs
技術改變生活,技術改變人生!用技術來創造價值,擁有技術,不僅僅是開發,您将獲得更多!如果您覺得我能幫到您,您可以通過掃描下面二維碼來【捐助】我!