1. ホーム
  2. .net

[解決済み] <Database> コンテキストを支えるモデルが、データベース作成後に変更されました。

2022-02-04 02:21:55

質問

エラーメッセージが表示されます。

AddressBook' コンテキストをバックアップするモデルは、データベースが作成された後に変更されました。 データベースを手動で削除/更新するか、IDatabaseInitializer インスタンスを使用して Database.SetInitializer を呼び出してください。 例えば、RecreateDatabaseIfModelChanges 戦略は、自動的にデータベースを削除して再作成し、オプションで新しいデータでシードします(")。

コードファーストの機能を使おうとして、以下のようなことを書きました。

var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
    var contact = new Contact
    {
        ContactID = 10000,
        FirstName = "Brian",
        LastName = "Lara",
        ModifiedDate = DateTime.Now,
        AddDate = DateTime.Now,
        Title = "Mr."

    };
    context.contacts.Add(contact);
    int result = context.SaveChanges();
    Console.WriteLine("Result :- "+ result.ToString());
}

コンテキストクラスです。

public class AddressBook : DbContext
{
    public AddressBook()
    { }
    public AddressBook(DbModel AddressBook)
        : base(AddressBook)
    {

    }
    public DbSet<Contact> contacts { get; set; }
    public DbSet<Address> Addresses { get; set; }
}

と接続文字列を指定します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
    <add name="AddressBook" providerName="System.Data.SqlClient"  
         connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;
         Integrated Security=True;MultipleActiveResultSets=True;"/>
    </connectionStrings>
</configuration>

つまり、データベース名は "AddressBook" で、コンテキストにコンタクトオブジェクトを追加しようとしたときにエラーが発生しました。何か見逃していませんか?

どうすればいいですか?

今はそうです。

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

をYourDbContext.csファイルに記述してください。