簡體   English   中英

代碼優先數據庫生成外部dll

[英]Code First database generation external dll

我嘗試首先使用代碼來生成數據庫,並在每次運行應用程序時將其種子化,但是出現以下錯誤:

無法將文件“ C:{filepath} \\ Application \\ App_Data \\ mydatabase.mdf”附加為數據庫“ mydatabase”。

我試圖做一個'update-database'(根據其他問題的建議),但是沒有生成.mdf文件。

這是使用的連接字符串:

數據源=(LocalDb)\\ v11.0; AttachDbFilename = | DataDirectory | \\ mydatabase.mdf;初始目錄= mydatabase;集成安全性= True

作為一些背景信息,我有兩個不同的項目,它們位於不同的解決方案中

  • 應用

“應用程序”項目引用了“域”項目

在域項目中,我創建了代碼優先模型和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();

原來,您需要將上下文添加到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-一個asp-net-mvc應用程序

要擴展正確答案,您還可以通過代碼添加此答案:

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();
        //...           
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM