2011-12-16 24 views
0

新しいEntity Frameworkでコードファーストアプローチを使用しようとしましたが、データベースのテーブルは自動的に作成されません。コードEFの最初のアプローチは私のためには役に立たない

私は既に(App_Codeフォルダ内に)データベースを作成しており、私はコードファーストアプローチを使用しています。私はDBのテーブルを最初に作成する必要がありますか、自動的に作成する必要がありますか?

add name="ApplicationServices" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" 

add name="MyDB" 
    connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true" 
    providerName="System.Data.SqlClient" 

クラス(モデルフォルダ内の)私のオブジェクトを説明する

public class UserProfile 
{ 
     [Key] 
     [Required] 
     public string PhoneNumber { get; set; } 

     [Required] 
     public string FirstName { get; set; } 

     [Required] 
     public string MiddleName { get; set; } 

     [Required] 
     public string Surname { get; set; } 

     [Required] 
     public DateTime Birthday { get; set; } 

     public int PositionId { get; set; } 

     public string Boss { get; set; } 

     [Required] 
     public int CompanyId { get; set; } 
} 

DbContext:以下

は、私は2つの接続文字列を持っているWeb.configファイルには、私のプロジェクト

の説明でありますクラス(モデルフォルダ内)

public class MyDB : DbContext 
{ 
    //public MyDB() : base("MyDB") { } 
    public DbSet<UserProfile> UserProfiles { get; set; } 
} 

データベースに新しい(&)レコード(テーブルはまだ存在しません)を挿入しようとしているコントローラです。

例外の詳細:System.Data.SqlClient.SqlException:無効なオブジェクト名 'dbo.UserProfiles' 私は、私は例外を取得SaveChanges()を呼び出すようにしようとしている

UserProfile newProfile = new UserProfile(); 
newProfile.CompanyId = 1; 
newProfile.PhoneNumber = model.PhoneNumber; 
newProfile.FirstName = model.FirstName; 
newProfile.MiddleName = model.MiddleName; 
newProfile.Surname = model.Surname; 
newProfile.Birthday = Convert.ToDateTime(model.Birthday); 

var myDb = new Models.MyDB(); 
myDb.UserProfiles.Add(newProfile); 
myDb.SaveChanges(); 

+0

両方の接続文字列を削除してみます。実際には自動的にデータベースを作成する必要があります。 –

+0

しかし、私は既にいくつかのテーブルとデータが入っているデータベースを持っていて、別のテーブルをコードに追加するのであれば、最初にアプローチしますか?このアプローチは機能しませんでしたか? – Pavel

+0

テーブルUserProfilesを手動で作成すると、すべてのOkと新しいレコードが挿入されます。しかし、私はコードが最初に欲しい:) – Pavel

答えて

1

内蔵EFデータベース初期化子データベースおよびデータベース内のすべてのテーブルを作成する必要があります - 既存のデータベースと連携することができませんが、あなたがcreate tables in existing databaseにできるようになり、独自の初期化子を構築することができます。

最初にデータベースを作成するコードでは、既存のテーブルの変更をサポートしていないデータベースイニシャライザがないため、必要な回数だけデータベースを削除して再作成できると期待しています(これは非常に有望なMigrationsで解決されます)。

関連する問題