使用ASP.NET MVC3+EF+Jquery制作文字直播系统(一)

来源:岁月联盟 编辑:exp 时间:2011-10-25

 

创建解决方案和项目

1.  首先,新建一个空的解决方案

解决方案的名称为:LiveText,如下图:

QQ截图20111013115139

2.  创建完解决方案,还需要创建三个项目,具体如下面的表格:

项目名称 Visual Studio项目模板 用途

LiveText.Domain

C#类库

保存域的实体和逻辑

LiveText.WebUI

ASP.NET MVC 3 Web Application

存储控制器和视图

LiveText.UnitTests

Test Project

单元测试

3.  添加引用

我们的项目中使用到了Ninject,Moq工具类库,首先需要添加对它们的引用,简便的方法是使用VS的Package Manager Console(View ➤ Other Windows ➤Package Manager Console),输入下面的命令:

Install-Package Ninject -Project LiveText.WebUI

Install-Package Ninject -Project LiveText.UnitTests

Install-Package Moq -Project LiveText.UnitTests

具体如下图:

QQ截图20111013120246

具体项目之间的依赖关系如下表:

项目名称 工具依赖 项目依赖

LiveText.Domain

没有

没有

LiveText.WebUI

Ninject

LiveText.Domain

LiveText.UnitTests

Ninject,Moq

LiveText.Domain,LiveText.WebUI

4.  设置依赖注入容器

项目中,我们使用Ninject创建控制器和处理依赖注入(DI)。在LiveText.WebUI项目中新建一个Infrastructure的文件夹,在该文件夹中新建一个NinjectControllerFactory类,代码如下:

	public class NinjectControllerFactory : DefaultControllerFactory{    private IKernel ninjectKernel;    public NinjectControllerFactory()    {        ninjectKernel = new StandardKernel();        AddBindings();    }    protected override IController GetControllerInstance(RequestContext requestContext,    Type controllerType)    {        return controllerType == null        ? null        : (IController)ninjectKernel.Get(controllerType);    }    private void AddBindings()    {    }}

然后修改Global.asax如下

	protected void Application_Start(){    AreaRegistration.RegisterAllAreas();    RegisterGlobalFilters(GlobalFilters.Filters);    RegisterRoutes(RouteTable.Routes);    //修改的这个地方    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());}

效果如下图:

QQ截图20111013120349

至此,项目的基本框架就做完了,下面设计数据库。

设计数据库

这里使用EF Code-First。

1.  编写实体类

人民网的文字直播系统分为“国新办发布会直播”、“国台办发布会直播”等类别,每个类别下面又有很多直播的内容。文字直播系统大体需要这几个实体类:

Category       ——      类别类                          Title      ——      标题类

          Text      ——      文字类                          User      ——      用户类

在LiveText.Domain项目中新建一个文件夹Entities,在该文件夹中新建上面四个类:

QQ截图20111013150243

	public class Category{    /// <summary>    /// 类别编号    /// </summary>    public int CategoryID { get; set; }    /// <summary>    /// 类别名称    /// </summary>    public string Name { get; set; }    /// <summary>    /// 标题集合    /// </summary>    public ICollection<Title> Titles { get; set; }}
	public class Title{    /// <summary>    /// 标题编号    /// </summary>    public int TitleID { get; set; }    /// <summary>    /// 标题名称    /// </summary>    public string Name { get; set; }    /// <summary>    /// 所属类别    /// </summary>    public Category Category { get; set; }    /// <summary>    /// 文字集合    /// </summary>    public ICollection<Text> Texts { get; set; }}
	public class Text{    /// <summary>    /// 文字编号    /// </summary>    public int TextID { get; set; }    /// <summary>    /// 发言人    /// </summary>    public string Prolocutor { get; set; }    /// <summary>    /// 发言内容    /// </summary>    public string ProContent { get; set; }    /// <summary>    /// 日期    /// </summary>    public DateTime ProDate { get; set; }    /// <summary>    /// 所属标题    /// </summary>    public Title Title { get; set; }}
	public class User{    /// <summary>    /// 用户编号    /// </summary>    public int UserID { get; set; }    /// <summary>    /// 用户名    /// </summary>    public string UserName { get; set; }    /// <summary>    /// 用户密码    /// </summary>    public string Password { get; set; }}

2.  添加EFCodeFirst

在Package Manager Console中输入命令:

Install-Package EFCodeFirst -Project LiveText.Domain

QQ截图20111013152422

3.  创建上下文类

在LiveText.Domain项目中,新建名为Concrete的文件夹,在该文件夹中新建一个LiveTextDbContext的类,它继承自System.Data.Entity.DbContext,

 

具体代码如下:

 

public class LiveTextDbContext : DbContext

{

    public DbSet<Category> Categories { get; set; }

    public DbSet<Title> Titles { get; set; }

    public DbSet<Text> Texts { get; set; }

    public DbSet<User> Users { get; set; }

}

4.  修改Web.config

 

打开LiveText.WebUI项目的Web.config,添加一个数据库连接字符串,name的值要和上下文类的名称一样。

 

  <connectionStrings>

    <add name="LiveTextDbContext"

         connectionString="Data Source=.;Initial Catalog=LiveText;Integrated Security=True;Pooling=False"

         providerName="System.Data.SqlClient"/>

  </connectionStrings>

新建一个HomeController,添加如下代码:

 

public class HomeController : Controller

{

    LiveTextDbContext context = new LiveTextDbContext();

 

    //

    // GET: /Home/

 

    public ActionResult Index()

    {

        var categories = context.Categories;

        return View(categories);

    }

 

}给Index添加一个View,如下图:

QQ截图20111013161349

现在就可以运行了,运行结果如下:

QQ截图20111013161922

再看看数据库里,EF已经为我们自动生成了数据库,数据库的结构如下图:

QQ截图20111013162156

至此,我们数据库的设计就完成了。

源代码下载地址:http://files.cnblogs.com/nianming/LiveText201110131625.rar


作者:田念明