2014-09-01 75 views
0

我試圖先用代碼來生成一個數據庫和每一個我的應用程序運行的時候種子它,但是我得到以下錯誤:代碼優先數據庫生成外部DLL

Cannot attach the file 'C:{filepath}\Application\App_Data\mydatabase.mdf' as database 'mydatabase'.

我試着做'更新數據庫'(根據其他問題推薦),但不生成.mdf文件。

這是用來連接字符串:

Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\mydatabase.mdf;Initial Catalog=mydatabase;Integrated Security=True

由於一些背景資料,我有坐不同的解決方案兩個不同的項目:

  • 應用

The 「應用」項目已在「域」項目

在域項目的引用我已經創建了我的第一個代碼模型和的DbContext:

public class ApplicationContext : IdentityDbContext<User, IntRole, int, IntUserLogin, IntUserRole, IntUserClaim> 
{ 
    public ApplicationContext() 
     : base(nameOrConnectionString: "constr") { } 

    public ApplicationContext(string connectionString) 
     : base(nameOrConnectionString: connectionString) { } 

    static ApplicationContext() 
    { 
     Database.SetInitializer<ApplicationContext>(null); 
    } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Use singular table names 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly()); 

     Configuration.ProxyCreationEnabled = false; 
     Configuration.LazyLoadingEnabled = false; 
     Configuration.ValidateOnSaveEnabled = false; 
    } 

    public DbSet<Item> Items { get; set; } 
} 

public class ApplicationContextInitializer : DropCreateDatabaseAlways<ApplicationContext> 
{ 
    protected override void Seed(ApplicationContext context) 
    { 

     new List<Item> 
     { 
      new Item("test") 
      { 
      }, 
      new Item("test2") 
      { 
      }, 
      new Item("test3") 
      { 
      } 
     }.ForEach(t => context.Items.Add(t)); 

     base.Seed(context); 
    } 
} 

裏面在Global.asax我有我的應用程序項目以下:

  Database.SetInitializer(new ApplicationContextInitializer()); 

我然後嘗試將數據添加到數據庫中:

 mUnitOfWork = new UnitOfWork(new RepositoryProvider(new RepositoryFactories())); 

     mUnitOfWork.ItemRepository.Add(new Item("my item")); 
     mUnitOfWork.Save(); 

回答

0

原來你需要一個上下文到web.config中如下:

<configuration> 
    <entityFramework> 
    <contexts> 
     <context type="Application.Data.ApplicationContext, Application.Data"> 
     <databaseInitializer type="Application.Data.ApplicationContextInitializer, Application.Data" /> 
     </context> 
    </contexts> 
    </entityFramework> 
</configuration> 

有用的鏈接,如果其他人有類似的問題:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

0

延長正確的答案,你也可以添加此代碼:

public class DBConfig 
{ 
    public static readonly DBInitializer Initalizer = new DBInitializer(); 

    public static void InitalizeDB() 
    { 
     System.Data.Entity.Database.SetInitializer<DMPDataContext>(Initalizer); 
    } 
} 
protected void Application_Start() 
    { 
     //common application startups 
     DBConfig.InitalizeDB(); 
     //...   
    } 
相關問題