《FluentData入门》由会员分享,可在线阅读,更多相关《FluentData入门(15页珍藏版)》请在金锄头文库上搜索。
1、 FluentData入门(一)-核心概念DbContext类这是FluentData的核心类,可以通过配置ConnectionString来定义这个类,如何连接数据库和对具体DbContext类这是FluentData的核心类,可以通过配置ConnectionString来定义这个类,如何连接数据库和对具体的哪个数据库进行数据查询操作。 DbCommand类这个类负责在相对应的数据库执行具体的每一个数据操作。 Events DbContext类定义了以下这些事件:OnConnectionClosedOnConnectionOpenedOnConnectionOpeningOnErrorOnE
2、xecutedOnExecuting可以在事件中,记录每个SQL查询错误或者SQL查询执行的 时间等信息。 Builders Builder用来创建Insert, Update, Delete等相关的DbCommand实例。 MappingFluentData可以将SQL查询结果自动映射成一个POCO(POCO - Plain Old CLR Object)实体类,也可以转换成一个dynamic类型。自动转成实体类:如果字段名中不包含下划线(_),将映射到具有相同名字的属性上,例如:字段名 Name 将映射到属性名 Name。如果字段名中不包含下划线(_),将映射到内嵌的属性上,例如:字段名
3、CategoryName 将映射到属性名 Category.Name。如果数据库字段名和属性名不一致,可以使用SQL的as让他们一致。自动转换成dynamic类型:对应dynamic类型,会为每个字段生成一个同名的属性,例如:字段名 Name 将映射到属性名 Name。什么时候应该主动释放资源? 如果使用UseTransaction或者UseSharedConnection,那么DbContext需要主动释放。如果使用UseMultiResult或者MultiResultSql,那么DbCommand需要主动释放。如果使用UseMultiResult,那么StoredProcedureBuil
4、der需要主动释放。其他所有的类都会自动释放,也就是说,一个数据库连接只在查询开始前才进行,查询结束后会马上关闭。的哪个数据库进行数据查询操作。 DbCommand类这个类负责在相对应的数据库执行具体的每一个数据操作。 Events DbContext类定义了以下这些事件: OnConnectionClosed OnConnectionOpened OnConnectionOpening OnError OnExecuted OnExecuting可以在事件中,记录每个SQL查询错误或者SQL查询执行的 时间等信息。 Builders Builder用来创建Insert, Update, De
5、lete等相关的DbCommand实例。 MappingFluentData可以将SQL查询结果自动映射成一个POCO(POCO - Plain Old CLR Object)实体类,也可以转换成一个dynamic类型。自动转成实体类:1 如果字段名中不包含下划线(_),将映射到具有相同名字的属性上,例如:字段名 Name 将映射到属性名 Name。2 如果字段名中不包含下划线(_),将映射到内嵌的属性上,例如:字段名 CategoryName 将映射到属性名 Category.Name。如果数据库字段名和属性名不一致,可以使用SQL的as让他们一致。自动转换成dynamic类型:3 对应dy
6、namic类型,会为每个字段生成一个同名的属性,例如:字段名 Name 将映射到属性名 Name。 什么时候应该主动释放资源? 如果使用UseTransaction或者UseSharedConnection,那么DbContext需要主动释放。 如果使用UseMultiResult或者MultiResultSql,那么DbCommand需要主动释放。 如果使用UseMultiResult,那么StoredProcedureBuilder需要主动释放。其他所有的类都会自动释放,也就是说,一个数据库连接只在查询开始前才进行,查询结束后会马上关闭。FluentData入门(二)-创建DbContex
7、t如何创建和初始化一个DbContext 可以在*.config文件中配置connection string,将connection string name或者将整个connection string 作为参数传递给DbContext来创建DbContext。重要配置 IgnoreIfAutoMapFails IDbContext.IgnoreIfAutoMapFails返回一个IDbContext,该实例中,如果自动映射失败时是否抛出异常通过*.config中配置的ConnectionStringName创建一个DbContext1: public IDbContext Context()
8、2: 3: return new DbContext().ConnectionStringName(MyDatabase, 4: new SqlServerProvider(); 5: 调用DbContext的ConnectionString方法显示设置connection string来创建 1: public IDbContext Context() 2: 3: return new DbContext().ConnectionString( 4: Server=MyServerAddress;Database=MyDatabase;Trusted_Connection=True;, ne
9、w SqlServerProvider(); 5: 其他可以使用的Provider只有通过使用不同的Provider,就可以切换到不同类型的数据库服务器上,比如 AccessProvider, DB2Provider, OracleProvider, MySqlProvider, PostgreSqlProvider, SqliteProvider, SqlServerCompact, SqlAzureProvider, SqlServerProvider.FluentData入门(三)-Query查询一组数据 返回一组dynamic对象(new in .NET 4.0) 1: List pr
10、oducts = Context.Sql(select * from Product).QueryMany();返回一组强类型对象 1: List products = Context.Sql(select * from Product).QueryMany();返回一个自定义的Collection 1: ProductionCollection products = Context.Sql(select * from Product).QueryMany();返回单个对象 返回一个dynamic对象 1: dynamic product = Context.Sql(select * from
11、 Product where ProductId = 1).QuerySingle();返回一个强类型对象: 1: Product product = Context.Sql(select * from Product where ProductId = 1).QuerySingle();返回一个DataTable: 1: DataTable products = Context.Sql(select * from Product).QuerySingle();其实QueryMany和QuerySingle都可以用来返回DataTable,但考虑到QueryMany返回的是List,所以使用Q
12、uerySingle来返回DataTable更方便。 查询一个标量值 1: int numberOfProducts = Context.Sql(select count(*) from Product).QuerySingle();返回一组标量值 1: List productIds = Context.Sql(select ProductId from Product).QueryMany();设置查询参数: 索引顺序形式的参数 1: dynamic products = Context.Sql(select * from Product where ProductId = 0 or Pr
13、oductId = 1, 1, 2).QueryMany();或者 1: dynamic products = Context.Sql(select * from Product where ProductId = 0 or ProductId = 1).Parameters(1, 2).QueryMany();名字形式的参数: 1: var command = Context.Sql(select ProductName = Name from Product 2: where ProductId=1) 3: .ParameterOut(ProductName, DataTypes.Stri
14、ng, 100); 4: command.Execute(); 5: 6: string productName = command.ParameterValue(ProductName); 7: 8: List of parameters - in operator: 9: List ids = new List() 1, 2, 3, 4 ; 10: 11: dynamic products = Context.Sql(select * from Product 12: where ProductId in(0), ids).QueryMany();Output 参数: 1: dynamic products = Context.Sql(select * from Product 2: where ProductId = ProductId1 or ProductId = ProductId2) 3: