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目录
浙公网安备 33010602011771号