簡體   English   中英

實體框架5不會使用我的視圖

[英]Entity Framwork 5 won't use my view

我使用EF(代碼優先)創建了一個MVC 4應用程序,該應用程序映射到使用SQL Management Studio創建的表和視圖的混合物,效果很好。

我已經使用完全不同的數據庫以與第一個項目幾乎相同的方式啟動了一個新的MVC 4項目,但是這一次我每次嘗試使用映射到視圖(而不是表)的模型時,都會出現一個異常,說“名稱為xxx的對象已存在”。 SQL事件探查器顯示EF試圖為我的模型創建表。

我發現如果放下視圖,讓EF從模型中創建表,然后刪除表並手動將其替換為視圖,則該應用程序將運行約2分鍾,從我的視圖中讀取並使用信息,但最終會拋出同樣的例外。

我不知道這是怎么回事。

導致異常的代碼是:

repository.Customers.OrderBy(c => c.AccountNumber);

模型在哪里:

public class Customer
{
    public int Id {get;set;}
    public string AccountNumber {get;set;}
    public string Name {get;set;}
}

確定-此問題的可能原因隱藏在上下文文件中。 當模型更改時,可能有一條類似於下面的語句試圖更新數據庫。

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());
    }   

我通常不使用此方法。 我更喜歡刪除數據庫,然后使用程序包管理器控制台重新生成它。 (查看程序包管理器控制台的update-database方法)

使用Greg的提示,我可以到達簡單添加的位置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<MyContext>(null);
}

到上下文類,這已經解決了問題。 我在這里的理解是,我已經告訴EF不要進行初始化,實質上是讓EF映射到在代碼優先上下文之外維護的現有數據庫。

我贊成Greg的回答,因為這是我需要的幫助,但由於上面的問題最終解決了它,因此創建了一個新的答案。 我希望這做對了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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