我正在尝试自学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; }
}
有人可以告诉我,我的方法是否正确,如果没有,我做错了什么?
另外,如何从这些类创建数据库,虽然它是自动生成的,但我在项目中看不到数据库。
答案 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中)。