LinqDB query the database

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     }

 

Guess you like

Origin www.cnblogs.com/kybs0/p/11741902.html