代码先行,以代码为主
1:建立model 映射数据库表
2:建立dbcontext 说明要连接哪个库,要操作什么表
3:Dal执行方法时创建实例 dbcontext
4:执行各种方法
1.2的基础工作就是建表,说明表,建立dbcontext上下文,连接配置名称
3.4 创建实例对象 进行增删改查操作
详解:
配置文件里设置
配置节点中要声名name
声名的内容~ <add name="DB_US" connectionString="Data Source=192.168.103.50\DBSERVER;
Initial Catalog=NewCommon180802;Persist Security Info=True;User ID=sa;Password=._com"
providerName="System.Data.SqlClient" />
!!俩个要点 1:声名providerName="System.Data.SqlClient"
2:configSections必须是configuration的第一个结点,把connectionStrings添加到第一个也是提示错误
<configuration>
<configSections> 第一个结点
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>第二个结点
声名的内容~
</connectionStrings>
1.建表 如何建? 关系怎么建?
建表就是建类,只是类里面的字段类型要匹配映射数据库的名字类型。关系也要建立。
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
配置约束俩种:1是属性注释 2:构造器Fluent API
对于映射数据库表实体model构建 主外键导航
首先第一步基础:建立简单字段
定义class 定义字段属性
如果不定义属性【table】属性注释class的话,数据库的名字会自己起名为class名字的复数形式
第二步建立主外键
由于默认会把Id结尾的属性作为主键,所以不用属性注释key也可以。
从表中表明是哪个主表哪个是外键名字
建议使用方法
[ForeignKey("A")] A表的外键 下方TarAid
public int TarAid { get; set; }
public Destination A { get; set; }
另一种写法
public int TarAid { get; set; }
[ForeignKey("TarAid ")] TarAid 是我A表的外键
public Destination A { get; set; }
逆属性
如果在一个主表中需要引用一个从表俩次
主表设置区分通过逆属性InverseProperty
//第一联系人
[InverseProperty("PrimaryContactFor")]
public Person PrimaryContact { get; set; }
//第二联系人
[InverseProperty("SecondaryContactFor")]
public Person SecondaryContact { get; set; }
一对一关系的话即是主键也是外键
[Key, ForeignKey("PhotoOf")]
public int PersonId { get; set; }
举列子说明:
属性注释就是model中字段直接解释说明 直接在对应的model类中写
eg:
key是主键 foreignkey是外键 还有很多列如字段长度 之类的可以自行百度。
构造器:主要是通过继承DbContext并重写其中的OnModelCreating方法来进行的 是写在下面介绍的dbcontext的类中
eg:
建立dbcontext 上下文 提供了有这么多构造函数 一般选择字符串连接就行了
在model类库下建立一个名字为Context的文件下 在里面建一个类 连接数据哭字符 然后不要初始化数据库
说明了连接数据库 就说明都有哪些表 是跟这个dbcontext 关联的
virtual 是关键字 dbset是表示上下文中的所有实体的集合,或者可以从数据库中查询给定类型的集合
3:创建实例:
在dal类库下创建工厂类EFContextFactory.cs,专为实例化上下文 写个方法
public static PeonyContext GetCurrentDbContext()
{
//CallContext:是线程内部唯一的独用的数据槽(一块内存空间)
//传递DbContext进去获取实例的信息,在这里进行强制转换。
PeonyContext dbContext = CallContext.GetData("PeonyContext") as PeonyContext;
if (dbContext == null) //线程在数据槽里面没有此上下文
{
dbContext = new PeonyContext(); //如果不存在上下文的话,创建一个EF上下文
//我们在创建一个,放到数据槽中去
CallContext.SetData("PeonyContext", dbContext);
}
return dbContext;
}
4:有了上下文 各个dal 方法类中 可以初始化
public PeonyContext DbContext = EFContextFactory.GetCurrentDbContext();
DbContext进行增删改查