Enable Migrations with Context in Separate Assembly?

前端 未结 4 1772
礼貌的吻别
礼貌的吻别 2020-11-29 18:59

I have one project that I want to run my update-database against but I have my Models and Context in a separate project.

If I run enable-migration

4条回答
  •  猫巷女王i
    2020-11-29 19:33

    You may only run "Enable-Migrations" in the project containing the Database Context class.

    Your solution will contain 2 projects:

    1) MyProject.Models
        |- Migrations
            |- 201401061557314_InitialCreate.cs
            |- Configuration.cs
        |- MyContext.cs
        |- App.config (no connection string)
    


    App.config

    
    
      
        


    2) MyProject.MVC
            |- Filters
                |- InitializeSimpleMembershipAttribute.cs
    


    InitializeSimpleMembershipAttribute.cs

    namespace MyProject.MVC.Filters
    {
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
        public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute
        {
            private static SimpleMembershipInitializer _initializer;
            private static object _initializerLock = new object();
            private static bool _isInitialized;
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                // Ensure ASP.NET Simple Membership is initialized only once per app start
                LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
            }
    
            private class SimpleMembershipInitializer
            {
                public SimpleMembershipInitializer()
                {
                    try
                    {
                        Database.SetInitializer(new MigrateDatabaseToLatestVersion());
    
                        using (var context = new MyContext())
                        {
                            context.Database.Initialize(force: true);
                            if (!context.Database.Exists())
                            {
                                // Create the SimpleMembership database without Entity Framework migration schema
                                ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
                            }
                        }
    
                        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
                    }
                    catch (Exception ex)
                    {
                        throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);
                    }
                }
            }
        }
    }
    

    Set MyProject.MVC as startup project

    In package manager, select project: MyProject.Models

    Then run "Enable-Migrations" to create "Migrations" folder in MyProject.Models

    Followed by "Update-Database" -> migrations will use connection string in Web.config from startup project to perform migration

提交回复
热议问题