2016-12-24 34 views
1

我目前正在使用SQL Server DB和Code First EF編寫.NET MVC應用程序。一切都很順利,並且stackoverflow非常有幫助。不幸的是,我有一個我無法解決的問題,我無法在互聯網上找到任何幫助。如何使用MVC和實體框架排除模型作爲數據庫的一部分

我想要與貝寶集成,我跟隨http://logcorner.com/asp-net-mvc-paypal-integration這似乎相當直接,除了VS想爲我的貝寶模型創建一個數據庫表,我不需要或不需要它。我在全班同學面前加[NotMapped]但現在它生成此錯誤:

The type 'MyApp.Models.PayPal' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive or generic, and does not inherit from EntityObject.

我看到關於我的分貝範圍內的OnModelCreating()方法將忽略(lambda表達式)一些其他的信息,但是,這似乎是排除一列,而不是全班。

任何想法?我不希望我的應用程序中的每個模型都有一個數據庫表。

回答

0

默認情況下,所有的模型將在數據庫中哪個是你的myAppEntities : DbContext類和屬性類型DbSet<>。如果你裝飾了你的模型MyApp.Models.PayPalnotmapped屬性的一部分來創建。

[NotMapped] 
public class PayPal 
{ 
//your all properties 
} 

然後取出從你的類Dbset<PayPal>性質,這是遺傳形式DbContext類。

public class MyAppEntities : DbContext 
     { 
      public DbSet<PayPal> paypal { get; set; } //Remove this or comment this line 
      ... 
      ... 
      //rest of your properties 
    } 

這樣做,這不會是你的數據庫的一部分,你不會得到這個錯誤。 (這個事情的解釋將涵蓋我不能在這裏解釋的整個主題)。

+0

這個釘了它,謝謝@Rajput。我沒有注意到DbContext類添加了** public System.Data.Entity.DbSet PayPals {get;組; }** 在底部。 – adeldegan

+0

標記爲答案和upvoted,但顯然我的代表是低到有我的upvote數。真誠的謝謝你的迴應。 – adeldegan

+0

歡迎您光臨@adeldegan – Rajput

0

您對[NotMapped]屬性的使用是正確的。在運行時,您試圖在此屬性生效時嘗試訪問數據庫的問題是:(a)您嘗試在該屬性生效時腳手架,或(b)。那是當我在測試工作中看到這個錯誤(見後面)。

在設計結束,下面將如果您使用自動腳手架解決你的問題(但見後):

  1. 刪除或您的PayPal面向類註釋掉[NotMapped]
  2. 重新編譯。 (由於MVC對代碼的反省, 你的過去的屬性仍然有效,直到你這樣做。)
  3. 現在做你的腳手架。
  4. 現在取消註釋或重新添加[NotMapped]
  5. 再次重新編譯的原因與之前一樣。

沒有太多的理由來自動支架,如果這正是你有問題,因爲你不希望保存數據,因此你不需要CRUD歡聲笑語。您的refsite上的示例使用幾乎爲空的控制器,與IDE爲您生成的控制器相比。

在運行時結束時(也就是在你的控制器代碼中),只要確保你永遠不會碰到數據庫。 肯定沒有什麼像db.SaveChanges();你不應該像我說的那樣需要;這實際上是一個ViewModel,它僅僅是爲了將數據推送到PayPal而存在。


要驗證問題和解決方案,我創建了一個例子MVC應用程序,把你看到的消息,代爲設計時的步驟,然後跑的應用程序在瀏覽器中,再次得到了問題的消息,刪除面向數據庫的代碼從我的未映射類控制器,並能夠讓事情正常工作。我沒有使用面向PayPal的課程,但更簡單一些來節省時間,但結果應該沒有差異。

我希望這可以解決您的問題。--ed

+0

感謝您的詳細解釋。 – adeldegan