004. 第一个CodeOnly案例

CodeOnly, 只有代码模型, 此种模型, 即没有数据库, 也没有模型
//创建两个类文件 OrderInfo.cs 和UserInfo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeOnly
{
   public class OrderInfo
    {
        [System.ComponentModel.DataAnnotations.Key]
        public int Id
        {
            get; set;
        }

        public string Auth
        {
            get; set;
        }

        public string BookName
        {
            get; set;
        }

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

//创建UserInfo类
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeOnly
{
   public  class UserInfo
    {
        [Key] //设置主键, 这个id是针对数据库的主键, 因为等会肯定是要生成数据库的
        public int Id
        {
            get; set;
        }

        public string Sname
        {
            get;set;
        }

        public string sAddr
        {
            get; set;
        }


       // [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public UserInfo()
        {
            // HashSet<OrderInfo>()肯定实现了ICollection<OrderInfo>接口
            this.OrderInfo = new HashSet<OrderInfo>();
        }
       // [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<OrderInfo> OrderInfo
        {
            get; set;
        }
    }
}

    //创建上下文, 针对这里的添加引用时, 有一个技巧, 就是添加一个空的CodeFirst模型, 然后再删除即可
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace CodeOnly
    {
        //添加一个空的CodeFirst模型, 然后引用会自动添加, 就不用一个个的添加引用了
        public  class CodeOnlyContainer : DbContext
        {
            public CodeOnlyContainer()  //name指向的是连接字符串, 需要到app.config文件中加上该连接字符串
                : base("name=CodeOnlyContainer")
            {
            }

            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //throw new UnintentionalCodeFirstException();
            }

            public  DbSet<UserInfo> UserInfo
            {
                get; set;
            }
            public  DbSet<OrderInfo> OrderInfo
            {
                get; set;
            }
        }
    }

  <!--在App.config中添加连接字符串-->
<configuration>
  <connectionStrings>
    <!--<add name="CodeOnlyContainer"  connectionString="data source=LG; uid=sa; pwd=123456; database=CodeOnly;" providerName="System.Data.SqlClient" />-->
    <add name="CodeOnlyContainer"  connectionString="data source=LG; initial catalog=CodeOnly;integrated security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
		
//main函数
namespace CodeOnly
{
    class Program
    {
        static void Main(string[] args)
        {
            CodeOnlyContainer codeOnly = new CodeOnlyContainer();

            codeOnly.Database.CreateIfNotExists(); //如果数据库不存在就创建它; 最重要的就是这句话了

            UserInfo userInfo = new UserInfo();
            userInfo.sAddr = "珠海";
            userInfo.Sname = "来到大";

            codeOnly.UserInfo.Add(userInfo);

            codeOnly.SaveChanges();

            Console.WriteLine("执行完毕");

            Console.ReadKey();
        }
    }
}

 备注:

MVC三层模型,

         v 视图层→ 就是单单指的是Html , aspx控件 , 标识页面如何展示

         c 控制器层→调用业务逻辑, 处理用户的请求数据, 然后把数据交给View展示; 代码后置的控制逻辑            controller层

         m 业务逻辑层, 数据库访问层, 数据模型层

MVC中控制器的约定:

         1. 控制器必须以Controller结尾

         2. 控制器必须是一个非静态类

         3. 必须实现IController接口

         4. 控制器下面所有的方法都称为ActionResult

         5. 所有控制器指定的视图, 都必须在Views文件夹下有对应的文件夹, 控制器中所有的方法,在该文件夹下有对应的文件

         6. Views文件夹下, 只能有一个文件夹可以不在控制器中, 就是Shared目录

posted on 2017-02-14 09:40  印子  阅读(126)  评论(0)    收藏  举报

导航