MVC4项目-不能DropCreateDatabaseIfModelChanges

本文关键字:DropCreateDatabaseIfModelChanges 不能 项目 MVC4 | 更新日期: 2023-09-27 18:10:24

我有一个使用表单认证的MVC4互联网应用程序。

开箱外的UserProfile模型是在帐户模型文件中创建的,我已经将其移动到自己的文件中,并在我的DbContext文件中称为DbSet<UserProfile>。我希望EF创建一个2表数据库,UserProfiles和Stories。

public class MySocialStoriesDb : DbContext
{
    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Story> Stories { get; set; }
}

故事模型
[Table("Stories")]
public class Story
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int StoryId { get; set; }
    public int UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual UserProfile User { get; set; }
    public string File { get; set; }
    public DateTime DateCreated { get; set; }
    public string Name { get; set; }
}

UserProfile模型
[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string EmailAddress { get; set; }
    public string UserDirectory { get; set; }
    public bool Paid { get; set; }
    public DateTime DatePaid { get; set; }
    public string PaymentId { get; set; }
}

我已经从包管理器运行Enable-Migrations并允许自动迁移和允许数据丢失。生成的InitialCreate文件似乎只创建User Profile表,它的代码中没有任何用于Story表的内容。

我在Global.asax

中添加了以下行
Database.SetInitializer(new Models.IntializeMySocialStoriesDb());

如果我现在改变一个模型,数据库上的任何东西都不会改变。如果我手动删除数据库并将InitializeMySocialStoriesDb更改为DropCreateDatabaseAlways,然后运行应用程序,数据库不会创建。

我只是想知道我错过了什么

MVC4项目-不能DropCreateDatabaseIfModelChanges

不用为这个机制操心了。这对于生产应用程序是不可行的,并且每次模式更改时都需要您冲洗所有数据。

相反,将数据库模式创建为单独的SSDT项目,并使用DACPAC文件初始部署和升级生产数据库,同时保持所有数据完整。只需将simplemember创建的表复制到您的SSDT项目中。

这样你就有了精确的列定义,可以精确地定义约束,精确地定义外键,主键和唯一键等,并且仍然可以通过应用程序项目中的实体框架访问数据。升级生产数据库上的模式只需要部署一个DACPAC。

在开发过程中,当您在SSDT中进行更改时,Visual Studio将自动更改表结构。

总之,我认为代码优先的定义太松散,没有组织,是一个坏主意。

相关文章:
  • 没有找到相关文章