首页 新闻 会员 周边

ef4.1codefirst是什么时候建数据库的?建不了又是什么原因呢?

0
悬赏园豆:10 [待解决问题]

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 我是用的默认的 应该是可以的。想问问是为什么?无论我怎么调试他他都没建库,怎么解决?

tytang的主页 tytang | 初学一级 | 园豆:110
提问于:2011-08-02 23:32
< >
分享
所有回答(2)
0

没有建立数据库的原因是你没有配置数据库连接字符串,配置分两步:

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();

artwl | 园豆:16736 (专家六级) | 2011-08-03 08:08
您好 关于配置文件的问题 新建一个 mvc3项目的时候他默认配置了一个文件 应该是可以用的 因为我之前试过不和配置文件打交道也可以自动生成数据库的
支持(0) 反对(0) tytang | 园豆:110 (初学一级) | 2011-08-03 08:32
今天早上我拿整个demo来公司的机上,一调试 就创建数据库了,我奇怪为什么在家的不可以?Q120890646 方便整个demo发你试试?
支持(0) 反对(0) tytang | 园豆:110 (初学一级) | 2011-08-03 08:38
1

直接生成空数据库有两种方法

方法一:在DbContext 的继承类(比如MyContext)的构造函数中添加代码:

this.Database.Initialize(true);

然后,创建一个实例,就会生成空数据库。代码如下:

var ef = new MyContext();//在设置首次加载的Action中

方法二:直接调用Database.Create()方法,代码如下:

var ef = new MyContext();            
ef.Database.Create();
黎明&岁月 | 园豆:159 (初学一级) | 2013-04-16 18:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册