c# Azure 移动应用 - 添加新模型不起作用



我创建了一个Azure移动应用程序,然后下载了生成的后端和移动应用程序。当我启动它时,它成功地获得了数据库中的 2 个待办事项。但是,一旦我添加如下用户模型 - 它就会停止在移动应用程序中获取待办事项。我不知道是什么导致了冲突。

  • 如果我删除用户模型和引用,我可以再次在移动应用程序上检索待办事项

当我从数据库上下文中注释掉这一行时,它再次工作:

//public DbSet<User> Users { get; set; }

启动:

public partial class Startup
    {
        public static void ConfigureMobileApp(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            //For more information on Web API tracing, see http://go.microsoft.com/fwlink/?LinkId=620686 
            config.EnableSystemDiagnosticsTracing();
            new MobileAppConfiguration()
                .UseDefaultConfiguration()
                .ApplyTo(config);
            // Map routes by attribute
            config.MapHttpAttributeRoutes();
            // Use Entity Framework Code First to create database tables based on your DbContext
            Database.SetInitializer(new AuthApp231Initializer());
            // To prevent Entity Framework from modifying your database schema, use a null database initializer
            // Database.SetInitializer<AuthApp231Context>(null);
            MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings();
            if (string.IsNullOrEmpty(settings.HostName))
            {
                // This middleware is intended to be used locally for debugging. By default, HostName will
                // only have a value when running in an App Service application.
                app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions
                {
                    SigningKey = ConfigurationManager.AppSettings["SigningKey"],
                    ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] },
                    ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] },
                    TokenHandler = config.GetAppServiceTokenHandler()
                });
            }
            app.UseWebApi(config);
        }
    }
    public class AuthApp231Initializer : CreateDatabaseIfNotExists<AuthApp231Context>
    {
        protected override void Seed(AuthApp231Context context)
        {
            List<TodoItem> todoItems = new List<TodoItem>
            {
                new TodoItem { Id = Guid.NewGuid().ToString(), Text = "First item", Complete = false },
                new TodoItem { Id = Guid.NewGuid().ToString(), Text = "Second item", Complete = false },
            };
            foreach (TodoItem todoItem in todoItems)
            {
                context.Set<TodoItem>().Add(todoItem);
            }
            /*List<User> users = new List<User>
            {
                new User { Id = Guid.NewGuid().ToString(), Username = "adrian", Password = "supersecret" }
            };
            foreach (User user in users)
            {
                context.Set<User>().Add(user);
            }*/
            base.Seed(context);
        }
    }

数据对象 :

public class User :EntityData
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }

上下文:

public class AuthApp231Context : DbContext
    {
        // You can add custom code to this file. Changes will not be overwritten.
        // 
        // If you want Entity Framework to alter your database
        // automatically whenever you change your model schema, please use data migrations.
        // For more information refer to the documentation:
        // http://msdn.microsoft.com/en-us/data/jj591621.aspx
        private const string connectionStringName = "Name=MS_TableConnectionString";
        public AuthApp231Context() : base(connectionStringName)
        {
        } 
        public DbSet<TodoItem> TodoItems { get; set; }
        public DbSet<User> Users { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Add(
                new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
                    "ServiceTableColumn", (property, attributes) => attributes.Single().ColumnType.ToString()));
        }
    }

据我所知,示例移动应用程序后端项目仅包含TodoItem模型,当您运行项目时,将触发Database.SetInitializer(new AuthApp231Initializer())并在数据库不存在时创建数据库和TodoItem表。如果在初始化数据库后添加其他数据模型,则需要迁移数据库。

注意:您可以利用Add-Migration来添加自定义迁移,并使用Update-Database使数据库保持最新。此外,还可以利用 MigrateDatabaseToLatestVersion 初始值设定项自动升级数据库。

有关如何启用 EF 代码优先迁移的更多详细信息,可以参考此官方教程。

要将模型添加到现有项目,您需要执行以下操作:

  1. 添加数据传输对象
  2. 将数据库集添加到上下文中
  3. 为新 DTO 添加表控制器
  4. 针对目标数据库设置并执行迁移,或者在数据库中创建相应的表
你已经

描述了你已经完成了#1和#2。 您没有表明您已经完成了#3或#4。

欲了解更多信息,请查看我的书 http://aka.ms/zumobook - 特别是第3章。

相关内容

  • 没有找到相关文章

最新更新