排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

前言
freesql Code First 设计模式
freesql 支持更多的数据库特性
而不只是支持基础的数据类型,这既是优点也是缺点,优点是充分利用数据库特性辅助开发,缺点是切换数据库变得困难。
如果实体类属性,与数据库表字段不完整映射的时候,未映射的字段有可能发生丢失。
FreeSql提供两种CodeFirst移迁方法,自动和手动。
自动同步实体结构到数据库,程序运行中检查实体表是否存在,然后迁移执行创建或修改
- IFreeSql fsql = new FreeSqlBuilder()
- //指定数据库类型以及数据库连接
- .UseConnectionString(DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=oa;Pooling=true;Min Pool Size=1;uid=sa;pwd=Aa123456;Max Pool Size=5;Encrypt=True;TrustServerCertificate=True;database=oa")
- //aop监听sql
- .UseMonitorCommand(cmd =>//执行前
- {
- }, (cmd, valueString) =>//执行后
- {
-
- })
- .UseAutoSyncStructure(true)//CodeFirst自动同步将实体同步到数据库结构(开发阶段必备),默认是true,正式环境请改为false
- .Build();
禁用迁移
当【实体类】对应的是数据库【视图】或者其他时,可通过 [Table(DisableSyncStructure = true)] 禁用指定的实体迁移操作。
freesql 不能为SQL server ,mysql创建数据库,需要自行创建数据库
Code First创建表结构
一、单张表创建
创建数据表实体类
属性添加表名,主键,自增
- //同步实体类型到数据库(单个)
- _FreeSql.CodeFirst.SyncStructure<Student>();
二、创建多个表结构
定义一个表模型类,将每张表设置一个name
- public class Model
- {
-
- [Table(Name = "oa.dbo.Teacher")]
- public class Teacher
- {
- [Column(IsPrimary = true, IsIdentity = true)]
- //
- public string TId { get; set; }
- //
- public string Tname { get; set; }
- //
- public string Tsex { get; set; }
- //
- public DateTime Tage { get; set; }
-
- }
-
- [Table(Name = "oa.dbo.Class")]
- public class Class
- {
- [Column(IsPrimary = true, IsIdentity = true)]
- //唯一ID
- public string CId { get; set; }
- //名称
- public string Cname { get; set; }
- //年级
- public string CClass { get; set; }
- }
- }
创建完成后通过反射拿到model类下的所有表模型
- /// <summary>
- /// 获取Model类下的所有数据库模型类,并拿到type集合
- /// </summary>
- /// <returns></returns>
- public static Type[] GetTypesByTableAttribute()
- {
- List<Type> tableAssembies = new List<Type>();
- foreach (Type type in Assembly.GetAssembly(typeof(Model)).GetExportedTypes())
- foreach (Attribute attribute in type.GetCustomAttributes())
- if (attribute is TableAttribute tableAttribute)
- if (tableAttribute.DisableSyncStructure == false)
- tableAssembies.Add(type);
-
- return tableAssembies.ToArray();
- }
最后执行
- //同步实体类型到数据库(多个)
- _FreeSql.CodeFirst.SyncStructure(GetTypesByTableAttribute());
三、命名空间创建
Entity文件夹下的实体类命名空间都是以WebApplication2.EntityList 命名
通过反射拿到同一命名空间下所有的实体类
- public static Type[] GetTypesByNameSpace(){
- List<Type> tableAssembies = new List<Type>();
- List<string> entitiesFullName = new List<string>()
- {
- "WebApplication2.EntityList",
- };
- foreach (Type type in Assembly.GetAssembly(typeof(Test1)).GetExportedTypes())
- foreach (var fullname in entitiesFullName)
- if (type.FullName.StartsWith(fullname) && type.IsClass)
- tableAssembies.Add(type);
-
- return tableAssembies.ToArray();}
最后执行
- //同步实体类型到数据库(多个)
- _FreeSql.CodeFirst.SyncStructure(GetTypesByNameSpace());
更多请查看freesql官方文档
指南 | FreeSql 官方文档
评价