Ef-Code-First 使用实体类映射出数据库

 

如果有外键的话 一定要搞清楚一对多、多对一和多对多的关系

比如一个用户对应一个用户详细信息可以写成这样:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QQManager.Models
{
    public class User
    {
        public Guid Id { get; set; }

        public string Name { get; set; }

        public virtual UserInfo UserInfo { get; set; }
    }
}

用户详细信息表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QQManager.Models
{
    public class User
    {
        public Guid Id { get; set; }

        public string Name { get; set; }

        public virtual UserInfo UserInfo { get; set; }
    }
}

订单表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QQManager.Models
{
    public class Orders
    {
        public Guid Id { get; set; }
        
        public virtual List<Gooder> Gooder { get; set; }
    }
}

商品表:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QQManager.Models
{
    public class Gooder
    {

        public Guid Id { get; set; }
        //商品名称
        public int Name { get; set; }
        //商品价格
        public int Price { get; set; }

        public virtual Orders Orders { get; set; }
    }
}

数据上下文:

using System;
using System.Collections.Generic;

// DbContext
using System.Data.Entity;


namespace QQManager.Models
{
    /// <summary>
    /// 数据库上下文
    /// </summary>
    public class QQContext:DbContext
    {
        public QQContext() : base("name=qq")//web.config中连接字符串的名称
        {
            //  当 模型发生变化时 重新创建数据库。
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<QQContext>());

        }
        //数据表,只要是模型类就要写进来
        public virtual DbSet<Order> Orders { get; set; }
    }
}

对于这种外键关系的字段,使用virtual关键字修饰用来懒加载,

关于操作数据库的语法:https://blog.csdn.net/u013924731/article/details/53331610

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Web;
using System.Web.Mvc;
using QQManager.Models;

namespace QQManager.Controllers
{
    public class BaseController : Controller
    {

        protected QQContext db
        {
            get
            {
                // 从当前线程中获取上下文数据。
                QQContext _db = CallContext.GetData("qq") as QQContext;
                if (_db == null)
                {
                    _db = new QQContext();
                    _db.Database.CreateIfNotExists();
                }
                // 将上下文数据保存到当前线程中。
                CallContext.SetData("qq",_db);
                return _db;
            }
        }
    }
}
View Code

继承此类就可以,db。

posted @ 2018-07-28 21:59 HJumping 阅读(...) 评论(...) 编辑 收藏