2013-05-07 30 views
1

我真的標題掙扎在這一個,所以希望我會在這裏形容它好多了!Ninject單和實體框架與MVC和API

我們使用實體框架作爲我們的ORM和Ninject作爲我們的依賴注入框架。我們與Ninject

Bind<IDbFactory>().To<DbFactory>().InSingletonScope(); 
Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope(); 

結合我們DbFactory和的UnitOfWork作爲一個單身現在,MVC項目這一偉大工程中,但我們也想使用API​​來發布一些數據到服務器,然後刷新頁面。 EF需要大約10分鐘才能決定要再次查詢數據庫以檢索數據。

除了禁用緩存,我唯一的理論,這是Ninject是創建對象的MVC項目中使用,另一個用於API。所以我的問題;我的理論是否正確?如果是的話,我該如何克服?

編輯:實例模型現在

public class Property 
{ 
    public int Id { get; set; } 
    public virtual ICollection<PropertyPhoto> PropertyPhotos { get; set; } 
    // Blah blah everything else 
} 

public class PropertyPhoto 
{ 
    public int Id { get; set; } 
    // Blah blah everything else 
} 

,而MVC項目使用Property模型

+0

您是否調試過該項目。有很多地方可能會發生緩存。瀏覽器,HTTP代理,IIS,.net,ASP.NET MVC,最後是EF。嘗試並追蹤請求實際觸及的位置。 – Aron 2013-05-07 08:48:05

+0

這不是瀏覽器 - 我們不使用代理 - 我們使用IIS Express。我將用示例模型編輯我的答案。 – Matt 2013-05-07 08:56:40

+2

「我們將UnitOfWork綁定爲一個單身人士」。這可能會成爲一個問題。根據定義,一個工作單元不是單件,而是每個請求或類似的東西。請看看[這篇相關文章](http://stackoverflow.com/questions/3266295/net-entity-framework-and-transactions/3266481#3266481)。 – Steven 2013-05-07 09:47:53

回答

0

我接下這個通知發出史蒂芬並刪除了該API的更新通過存儲庫中的PropertyPhoto模型單身的範圍,但這阻止我從數據庫中刪除實體,最後我用

Bind<IDbFactory>().To<DbFactory>().InThreadScope(); 
Bind<IUnitOfWork>().To<UnitOfWork>().InThreadScope(); 
+1

ThreadScope只是走動的問題。您需要使用InRequestScope來請求範圍內的東西,並在您的操作結束時完成所有處理。但它聽起來像你還有其他的東西,所以你可能需要弄髒http://stackoverflow.com/questions/7951914/ninject-inrequestscope-fallback-to-inthreadscope和/或ttp://stackoverflow.com /問題/ 15599325 /尋找-FOR-A-ninject範圍的,也就是說,行爲樣inrequestscope – 2013-05-07 11:36:30

+0

@RubenBartelink - 感謝,會考慮這個儘快 – Matt 2013-05-07 13:24:45