Code First数据库生成外部DLL

时间:2014-09-01 14:42:41

标签: c# entity-framework ef-code-first

我试图首先使用代码生成数据库并在每次运行应用程序时播种它,但是我收到以下错误:

  

无法附加文件   ' C:{文件路径} \应用程序\程序App_Data \ mydatabase.mdf'作为数据库   ' MyDatabase的'

我已经尝试过更新数据库' (根据其他问题的建议)但是没有生成.mdf文件。

这是使用的连接字符串:

  

数据   源=(的LocalDB)\ V11.0; AttachDbFilename = | DataDirectory目录| \ mydatabase.mdf;初始   Catalog = mydatabase; Integrated Security = 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();

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();
        //...           
    }