数据库上下文类的正确设置?

时间:2016-11-25 14:21:20

标签: c# asp.net-mvc entity-framework

我正在尝试自学asp.net mvc,我不知道如何为dbcontext类做正确的设置。

首先我在我的项目上安装了实体框架。 然后我创建了一个看起来像这样的模型:

 public class Post
    {
        public int PostId { get; set; }

        public string Title { get; set; }

        public string Content { get; set; }

        public Post(int PostId, string Title, string Content)
        {
            this.PostId = PostId;
            this.Title = Title;
            this.Content = Content;
        }

之后我在Models文件夹中创建了一个名为ClassAppContext.cs的类,在创建它之后我做了一个enable-migrations,这是这个类的外观:

 public class ClassAppContext : DbContext
    {
        public DbSet<Post> Posts { get; set; }

    }

有人可以告诉我,我的方法是否正确,如果没有,我做错了什么?

另外,如何从这些类创建数据库,虽然它是自动生成的,但我在项目中看不到数据库。

1 个答案:

答案 0 :(得分:1)

所以有几件事。你走在正确的轨道上。

您需要覆盖上下文类中的OnModelCreating()方法,并定义初始化策略以及实体配置映射(这是在单独的类中创建它的理想选择,但您可以在方法OnModelCreating中使用它以及)。所以你的上下文类看起来像:

public class ClassAppContext : DbContext
{
    public DbSet<Post> Posts { get; set; }

    public ClassAppContext() : base("name=ClassAppDbContext")
    {
        Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ClassAppContext>());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove(new PluralizingTableNameConvention());
        modelBuilder.Configurations.AddFromAssembly(typeof(PostMap).Assembly);
    }
}

public class PostMap : EntityTypeConfiguration<Post>
{
    public PostMap()
    {
        ToTable("Post");
        HasKey(x => x.PostId)
            .Property(x => x.PostId)
            .IsRequired()
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        Property(x => x.Title)
            .IsRequired()
            .HasColumnType("nvarchar")
            .HasMaxLength(250);

        Property(x => x.Content)
            .HasColumnType("nvarchar")
            .HasMaxLength(500);
    }
}

您的 ClassAppDbContext 是您在web.config中定义的连接字符串名称(如果您在单独的程序集中有上下文,也会在app.config中)。