1

このタイトルの他の質問を見てきましたが、すべてテーブルを削除するように言われています。削除したくありません。重要なデータが含まれています。

代わりに、そもそも 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 がテーブルを再作成しようとするのを止めるにはどうすればよいですか?

4

3 に答える 3

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" );
}

新しいテーブルを作成しようとするのではなく、既存のテーブルを使用するように Entity Framework に指示する必要があります。すべての列をマッピングする必要はありません。

ToTable()およびメソッドに渡す文字列がHasColumnName()、データベースにあるものと正確に一致していることを確認してください。

于 2013-02-06T19:56:46.940 に答える
2

何が起こっているのかというと、MVC がデータベースをチェックしていて、データベースにアカウント オブジェクトがなく、その場合は ID という 1 つの列しかないことがわかります。したがって、MVC はそのオブジェクトを作成しようとしています。既存のテーブル構造を使用するために必要なことは、オブジェクトをデータベースに既にあるものと一致させることです。

また、一時データベースを作成し、1 つのプロパティ (列) のみでオブジェクトを作成することもできます。これにより、接続文字列が正しいかどうかを確認できます。

于 2013-02-06T19:54:21.430 に答える
1

Global.asax の Application_Start() に次の行を追加します。

Database.SetInitializer(null);

これにより、テーブルの作成が妨げられます

于 2013-10-07T15:57:59.723 に答える