2个model的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data .Entity ;
namespace blog.Models
{
public class blog
{
public int blogID { get; set; }
public string title {get;set; }
public string content { get; set; }
public column column { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace blog.Models
{
public class column
{
public int columnID { get; set; }
public int columnname { get; set; }
}
}
上下文的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace blog.Models
{
public class handel:DbContext
{
public DbSet<blog> blogs { get; set; }
public DbSet<column> columns { get; set; }
}
}
controller的部分代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
namespace blog.Controllers
{
using Models;
public class blogController : Controller
{
//
// GET: /blog/
handel dbhand = new handel();
public ActionResult Index()
{
return View(dbhand.blogs.ToList ());
}
编译成功,运行也到了相应的页面,可是就是数据库没建立!Web.config 我是用的默认的 应该是可以的。想问问是为什么?无论我怎么调试他他都没建库,怎么解决?
没有建立数据库的原因是你没有配置数据库连接字符串,配置分两步:
1、在网站配置文件中添加数据库连接字符串
2、在dbcontext中指定数据库连接字符串
3、完成上面两步后,在有数据时才会有效果,新创建的数据库里没数据,你的代码中dbhand.blogs.ToList ()这个是空的,看不到数据的。
另外,你的代码中存在一些问题,参考下面的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace ConsoleCodeFirst
{
public class Blog
{
public int blogID { get; set; }
public string title { get; set; }
public string content { get; set; }
public int columnID { get; set; }
public virtual Column column { get; set; }
}
public class Column
{
public int columnID { get; set; }
public int columnname { get; set; }
public virtual ICollection<Blog> blogs { get; set; }
}
public class BlogContext : DbContext
{
public BlogContext()
: base("CodeFirstTest")
{
}
public DbSet<Blog> blogs { get; set; }
public DbSet<Column> columns { get; set; }
}
public class TestCodeFirst
{
public void Test()
{
using (var db = new BlogContext())
{
//向数据库添加记录
var column = new Column() { columnID = 1, columnname = 1 };
db.columns.Add(column);
var blog = new Blog()
{
blogID=1,
title="abc",
content="test content",
columnID=1
};
db.blogs.Add(blog);
//保存记录,返回受影响的行数
int recordsAffected = db.SaveChanges();
Console.WriteLine("追加{0}记录成功", recordsAffected);
}
}
}
}
配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="CodeFirstTest" connectionString="data source=.;initial catalog=CodeFirstTest;integrated security=True;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
TestCodeFirst test = new TestCodeFirst();
test.Test();
直接生成空数据库有两种方法:
方法一:在DbContext 的继承类(比如MyContext)的构造函数中添加代码:
this.Database.Initialize(true);
然后,创建一个实例,就会生成空数据库。代码如下:
var ef = new MyContext();//在设置首次加载的Action中
方法二:直接调用Database.Create()方法,代码如下:
var ef = new MyContext();
ef.Database.Create();