2013-02-06 56 views
1

我已經看過這個標題的其他問題,但他們都說要刪除表。我不想刪除它,它有重要的數據。在數據庫中已經有一個名爲「Accounts」的對象(ASP.NET MVC)

相反,我不能讓MVC停止嘗試重新創建它嗎?我只想讀取它的數據並輸出它。我只是想將它輸出這樣的:

return View(db.Accounts.ToList()); 

這是我的模型:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 

namespace MvcApplication1.Models 
{ 
    public class Account 
    { 
     public int ID { get; set; } 
    } 

    public class MyDbContext : DbContext 
    { 
     public DbSet<Account> Accounts { get; set; } 
    } 
} 

我怎樣才能阻止MVC從試圖重新我的表?

+0

您是否使用實體框架? – Robert

+0

我有一個開箱即用的ASP.NET MVC 4應用程序。我不想先使用代碼,因爲我的數據庫已經建好了。我不確定我是否使用EF或不... – user1477388

+1

您的帳戶對象是否與數據庫中的帳戶表匹配 – Robert

回答

2

發生了什麼是MVC正在檢查數據庫,並且發現在數據庫中沒有帳戶對象,只有一列,在您的情況下是ID。所以MVC正試圖爲你創建這個對象。爲了使用現有的表結構,你需要做的是讓你的對象與數據庫中已有的對象相匹配。

您還可以創建一個臨時數據庫並使用一個屬性(列)創建對象。這可以讓你看到你的連接字符串是否正確。

+0

哦,廢話!我擔心情況會如此;這張表有很多字段,我不得不手動輸入。是否有快速輸入所有字段到我的模型/規避必須這樣做? – user1477388

+0

好主意,羅伯特。我會考慮這樣做。謝謝。 – user1477388

+1

正好。我指出,你可以使用另一個架構或數據庫來獲取你的蛋糕,也可以吃它。但@Robert的基本點。那麼把+1 –

2

嘗試通過在上下文類中重寫OnModelCreating()方法來映射你的賬戶類到現有的表

public class MyDbContext : DbContext 
{ 
    public DbSet<Account> Accounts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Account>().ToTable("dbo.Accounts"); 
     //and perhaps the columns as well 
     modelBuilder.Entity<Account>().Property(p => p.Id) 
             .HasColumnName("Id"); 
} 

這應該告訴實體框架使用你現有的表,而不是試圖創建一個新的。映射每個列不應該是必需的。

確保您傳遞給ToTable()HasColumnName()方法的字符串與數據庫中的內容完全匹配。

在Global.asax
+0

謝謝,我不知道它是否會工作,因爲我只是用一個簡單的表來代替或使用這個,但它看起來是個好主意。 – user1477388

1

把下面的線在Application_Start()

Database.SetInitializer(空);

這將阻止創建表 我希望可以幫助

相關問題