LinqDB database query data, is still very convenient.
Entity data entity class 1. Add
After the mapping operation easy
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. Add in a general class 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. Add the specified database connection class mapping
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. Add the database query helper class
Here is the database on startup directory, an absolute path references.
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 is the throw new new an InvalidOperationException ( " absence of route database file " ); 13 is } 14 _coursewareDbProvider = new new DbProvider covers <CoursewareInfoDb> (() => $ " the Data the Source = {dbPath} " ); 15 } 16 . 17 public List < CoursewareInfo> GetCoursewares () 18 is { . 19 return _coursewareDbProvider.Execute (DB => db.Coursewares.ToList ()); 20 is } 21 is public List<CoursewareInfo> GetCoursewares(string queryText) 22 { 23 return _coursewareDbProvider.Execute(db => db.Coursewares.Where(i=>i.Name.Contains(queryText)).ToList()); 24 } 25 }