LinqDB 查询数据库
LinqDB数据库查询数据,还是很方便的。
1. 添加Entity数据实体类
方便之后映射操作
1 /// <summary> 2 /// 课件 3 /// </summary> 4 [DataContract] 5 [Table("Courseware")] 6 public class CoursewareInfo 7 { 8 [DataMember(Name = "LocalId")] 9 [PrimaryKey, Column("LocalId"), NotNull] 10 public string LocalId { get; set; } 11 12 [DataMember(Name = "RemoteId")] 13 [Column("RemoteId")] 14 public string RemoteId { get; set; } 15 16 [Column("Name")] 17 public string Name { get; set; } 18 }
2. 添加DB操作通用类
1 public class DbProvider<TDB> where TDB : LinqToDB.Data.DataConnection, new() 2 { 3 private readonly string _connectionString; 4 private readonly Func<string> _getConnectionStringFunc; 5 6 private string ConnectionString 7 => string.IsNullOrEmpty(_connectionString) ? _getConnectionStringFunc() : _connectionString; 8 9 public DbProvider(Func<string> getConnectionStringFunc) 10 { 11 _getConnectionStringFunc = getConnectionStringFunc; 12 } 13 public TReturn Execute<TReturn>(Func<TDB, TReturn> execute) 14 { 15 TDB db = null; 16 try 17 { 18 db = (TDB)Activator.CreateInstance(typeof(TDB), new SQLiteDataProvider(), ConnectionString); 19 return execute(db); 20 } 21 catch (Exception ex) 22 { 23 return default(TReturn); 24 } 25 finally 26 { 27 db?.Dispose(); 28 } 29 } 30 }
3. 添加指定数据库的映射连接类
1 public partial class CoursewareInfoDb : DataConnection 2 { 3 public ITable<CoursewareInfo> Coursewares => GetTable<CoursewareInfo>(); 4 5 public CoursewareInfoDb() 6 { 7 InitDataContext(); 8 } 9 10 public CoursewareInfoDb(string configuration) 11 : base(configuration) 12 { 13 InitDataContext(); 14 } 15 16 public CoursewareInfoDb(IDataProvider dataProvider, string connectionString) 17 : base(dataProvider, connectionString) 18 { 19 InitDataContext(); 20 } 21 22 partial void InitDataContext(); 23 }
4. 添加数据库查询辅助类
这里是将数据库放在程序启动目录下,通过绝对路径引用。
1 public class CoursewareSqliteDataReader 2 { 3 private static readonly string DbName = "CoursewareCacheData.db"; 4 private readonly DbProvider<CoursewareInfoDb> _coursewareDbProvider; 5 6 public CoursewareSqliteDataReader() 7 { 8 var dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Dbs\\{DbName}"); 9 10 if (!File.Exists(dbPath)) 11 { 12 throw new InvalidOperationException("路径下不存在数据库文件"); 13 } 14 _coursewareDbProvider = new DbProvider<CoursewareInfoDb>(() => $"Data Source={dbPath}"); 15 } 16 17 public List<CoursewareInfo> GetCoursewares() 18 { 19 return _coursewareDbProvider.Execute(db => db.Coursewares.ToList()); 20 } 21 public List<CoursewareInfo> GetCoursewares(string queryText) 22 { 23 return _coursewareDbProvider.Execute(db => db.Coursewares.Where(i=>i.Name.Contains(queryText)).ToList()); 24 } 25 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2018-10-26 C# 程序管理员权限启动