排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术
分类:
Free sql
前言
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 官方文档
评价