Voy.DALBase
1.0.5
See the version list below for details.
dotnet add package Voy.DALBase --version 1.0.5
NuGet\Install-Package Voy.DALBase -Version 1.0.5
<PackageReference Include="Voy.DALBase" Version="1.0.5" />
<PackageVersion Include="Voy.DALBase" Version="1.0.5" />
<PackageReference Include="Voy.DALBase" />
paket add Voy.DALBase --version 1.0.5
#r "nuget: Voy.DALBase, 1.0.5"
#:package Voy.DALBase@1.0.5
#addin nuget:?package=Voy.DALBase&version=1.0.5
#tool nuget:?package=Voy.DALBase&version=1.0.5
Voy.DALBase Readme
ORM framework for MySql(Will add more) using lambda expressions.
How to use
Instantiate
using System.Data.Common;
DbConnection conn = new MySqlConnection("Server=XXX.XXX.XXX.XXX; Port=XXXX; Database=XXXX; Uid=XXXX; Pwd=XXXXXXXX; SslMode=Preferred;");
VDB vdb = new VDB(conn));
Public Methods
MethodName | Description | CreateDatabase | DropDatabase | GetDatabaseTables | CreateTable | DropTable | TruncateTable | GetTableStructure | Insert | Delete | Update | Select |
---|---|---|---|---|---|---|---|---|---|---|---|---|
方法名 | 说明 | 创建数据库 | 移除数据库 | 获取数据库中的表信息 | 创建数据表 | 移除数据表 | 清空数据表 | 获取数据表结构 | 插入数据 | 删除数据 | 更新数据 | 查询数据 |
GetSQLString() | 获取SQL语句。 | <center><center>✓</center></center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> |
GetParams() | 获取SQL语句的参数。 | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> |
Execute() | 执行数据操作命令。 | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | <center>✓</center> | |||
GetData() | 执行数据查询命令。 | <center>✓</center> | <center>✓</center> | <center>✓</center> | ||||||||
ExecuteScalar() | 执行标量查询命令。 | <center>✓</center> | <center>✓</center> | <center>✓</center> |
Insert
//使用Lambda表达式插入数据。
var ins1 = vdb.Insert<User>(u => new User { Name = "张三", Age = 30 });
//使用实体对象插入数据。(可省略<TClass>)
var ins2 = vdb.Insert(new User { Name = "李四", Age = 40 });
//批量插入数据。
var ins3 = vdb.Insert<User>(new List<User>
{
new User { Name = "刘一", Age = 10, CreateTime = DateTime.Now },
new User { Name = "陈二", Age = 20, CreateTime = DateTime.Now },
new User { Name = "王五", Age = 50, CreateTime = DateTime.Now },
new User { Name = "赵六", Age = 60, CreateTime = DateTime.Now },
new User { Name = "孙七", Age = 70, CreateTime = DateTime.Now },
new User { Name = "周八", Age = 80, CreateTime = DateTime.Now },
new User { Name = "吴九", Age = 90, CreateTime = DateTime.Now },
new User { Name = "郑十", Age = 100, CreateTime = DateTime.Now },
});
- 使用方法:Insert<TClass>(),参数不可为空。获取结果方法名称:Execute()。
- 可以使用:Lambda表达式、实体对象做为参数单次插入一条记录,也可以用List<TClass>型参数批量插入多条记录。
- 插入一条记录时返回自增主键值。如果主键不是自增长,返回0;插入多条记录时返回影响行数。
- 可空的属性将插入空值,不可空属性将插入默认值。
Update
//用Lambda表达式更新数据。
var upd1 = vdb.Update<User>(u => new User { Id = 1, Name = "王五", Age = 50 });
//用表达式 + Where方法更新数据。
var upd2 = vdb.Update<User>(u => new User { Name = "赵六", Age = 60 }).Where(u => u.Name == "李四");
//用匿名对象更新数据。
var upd3 = vdb.Update<User>(new { Id = 1, Name = "孙七", Age = 70 });
//用匿名对象更新 + Where方法更新数据。
var upd4 = vdb.Update<User>(new { Name = "周八", Age = 80 }).Where(u => u.Name == "赵六");
- 使用方法:Update<TClass>(),参数不可为空。获取结果方法名称:Execute()。
- 可以使用:Lambda表达式、匿名对象作为参数修改一条记录。目前不支持实体对象,使用实体对象将不能成功执行。为了后续版本向前兼容,参数类型持续使用dynamic。
- 使用匿名对象参数和Where()方法更新记录时可以更新任何列;只使用对象参数更新时,主键字段的值将作为筛选条件不进行更新。
- 匿名对象参数中与“TClass”中同名的属性,如果带有“DatabaseGeneratedOption.Computed”标签将不会出现在生成的SQL语句中。
- 匿名对象的列中未包括主键字段,也没有使用Where语句进行更新筛选时,为了数据安全更新操作将不会被执行。
Delete
//用Lambda表达式删除数据。
var del1 = vdb.Delete<User>(u => new User { Id = 1 });
//用Where方法删除数据。
var del2 = vdb.Delete<User>().Where(u => u.Name == "周八");
//用实体对象删除数据。(可省略<TClass>)
var del3 = vdb.Delete(new User() { Name = "周八" });
//用Lambda表达式 + Where方法删除数据。
var del4 = vdb.Delete<User>(u => new User { Id = 1 }).Where(u => u.Name == "周八");
//用实体对象 + Where方法删除数据。
var del5 = vdb.Delete<User>(new User { Id = 1 }).Where(u => u.Name == "周八");
- 使用方法:Delete<TClass>(),参数可为空。获取结果方法名称:Execute()。
- 可以使用:Lambda表达式、实体对象做为参数删除记录,也可以用Where方法作为筛选条件删除记录。
- 使用实体对象为参数筛选记录时,如果对象的属性是数值型的默认值(例如int的0)则无效果,例如不要使用“new User { Age = 0 }”。
- 有参数,也使用Where语句进行更新筛选时,筛选条件将进行AND合并。
- 无参数,也没有使用Where语句进行更新筛选时,为了数据安全更新操作将不会被执行。
Select
//获取全部字段
var sel1 = vdb.Select<User>()
.Where<User>(u => u.Name == "王五")
.OrderBy(u => u.Id)
.OrderBy(u => u.Age)
.Page(1, 10);
//获取指定字段
var sel2 = vdb.Select<User>(u => new { u.Id, u.Name })
.Where<User>(u => u.Name == "王五")
.OrderByDesc(u => u.Id)
.OrderBy(u => u.Age)
.Page(1, 10);
方法 | 说明 | 参数 | 可使用次数 | 备注 |
---|---|---|---|---|
InnerJoin | 联合查询 | Lambda表达式 | <center>∞</center> | 如果表中有至少一个匹配,则返回行。 |
LeftJoin | 左联合查询 | Lambda表达式 | <center>∞</center> | 即使右表中没有匹配,也从左表返回所有的行。 |
RightJoin | 右联合查询 | Lambda表达式 | <center>∞</center> | 即使左表中没有匹配,也从右表返回所有的行。 |
FullOutJoin | Lambda表达式 | <center>∞</center> | 只要其中一个表中存在匹配,则返回行。 | |
Where | 通过属性进行筛选 | Lambda表达式 | <center>∞</center> | 多次使用时,方法之间的筛选条件关系是And。 |
WhereByBase | 通过基类的属性进行筛选 | Lambda表达式 | <center>∞</center> | 用于筛选的类型不确定,又需要使用通用属性(例如约定每个类都有Id)的时候。WhereByBase<TClass, TBase>两个类型参数为必填。 |
GroupBy | 分组 | Lambda表达式 | <center>∞</center> | |
OrderBy | 升序排序 | Lambda表达式 | <center>∞</center> | |
OrderByDesc | 降序排序 | Lambda表达式 | <center>∞</center> | |
Page | 筛选结果的分页 | int pageIndex, int pageSize | <center>1</center> | 引用Total属性获得记录总数。 |
Operators For Filter(Where Method)
Operator | Description | Usage example | ||||
---|---|---|---|---|---|---|
<center>==</center> | u.Name == "张三" | |||||
<center>!=</center> | u.Name != "张三" | |||||
<center><</center> | u.Age < 50 | |||||
<center><=</center> | u.Age ⇐ 50 | |||||
<center>></center> | u.Age > 50 | |||||
<center>>=</center> | u.Age >= 50 | |||||
<center>&&</center> | u.Name == "aa" && u.Age == 10 | |||||
<center> | </center> | u.Name == "aa" | u.Age == 10 | |||
<center>StartsWith</center> | u.Name.StartsWith("abc") | |||||
<center>EndsWith</center> | u.Name.EndsWith("abc") | |||||
<center>Contains</center> | u.Name.Contains("a")\new[] { 1, 2, 3, 4 }.Contains(u.Id)\Enumerable.Contains<int>(new[] { 1, 2, 3, }, u.Age)\Enumerable.Contains<string>(new[] { "张三", "李四" }, u.Name) |
- Methods can also be used multiple times, and the order of use is not required. The relationship between the filter conditions executed by multiple methods is And.方法也可以多次使用,使用顺序无要求。多个方法执行的筛选条件之关系为And。
- If there is an "OR" relationship, you can use the static method "Tools.ExpressionTools.CreateExpression<T>()" to create more flexible filter conditions as parameters. 如果有“OR”的关系可以使用静态方法“Tools.ExpressionTools.CreateExpression<T>()”来创建更灵活的筛选条件作为参数。For example:
var e1 = ExpressionTools.CreateExpression<User>(u => u.Id == 1 || u.Name.Contains("z"));
var e2 = ExpressionTools.CreateExpression<User>(u => u.Age > 20);
var exp = e1.And(e2);
var v1 = vdb.Select<User>().Where(exp);
Agg
var v1 = vdb.Select<User>()
.SUM(u => u.Age,)
.COUNT(u => u.IsDeleted == 0)
var result = v1.GetData();
方法 | 说明 | 参数 | 可用次数 |
---|---|---|---|
Avg | 计算某个列的平均值。 | Lambda表达式 | <center>∞</center> |
Count | 统计集合中的项目数。 | Lambda表达式 | <center>∞</center> |
Max | 计算列的最大值。 | Lambda表达式 | <center>∞</center> |
Min | 计算列的最小值。 | Lambda表达式 | <center>∞</center> |
Sum | 计算列的合计值。 | Lambda表达式 | <center>∞</center> |
About Attribute For Model
Table
Name | 说明 | Description | Usage example | Namespace |
---|---|---|---|---|
Table | 表示类将映射到的数据库表。 | Indicates the database table to which the class will be mapped. | [Table("user_team")] | System.ComponentModel.DataAnnotations.Schema |
Column
Name | 说明 | Description | Usage example | Namespace |
---|---|---|---|---|
Column | 表示属性将映射到的数据库列。 | Indicates the database column to which the attribute will be mapped. | [Column("id", Order = 0, TypeName = "int")] | System.ComponentModel.DataAnnotations.Schema |
Computed | 在插入或更新一个行时,数据库会生成一个值。 | When a row is inserted or updated, the database generates a value. | [DatabaseGenerated(DatabaseGeneratedOption.Computed)] | System.ComponentModel.DataAnnotations.Schema |
Identity | 在插入一个行时,数据库会生成一个值。 | Indicates that a property or class should be excluded from database mapping. | [DatabaseGenerated(DatabaseGeneratedOption.Identity)] | System.ComponentModel.DataAnnotations.Schema |
None | 数据库不生成值。 | Represents one or more properties that uniquely identify an entity. | [DatabaseGenerated(DatabaseGeneratedOption.None)] | System.ComponentModel.DataAnnotations.Schema |
NotMapped | 表示应从数据库映射中排除属性或类。 | Specifying a data field value is required. | [NotMapped] | System.ComponentModel.DataAnnotations.Schema |
Key | 表示唯一标识实体的一个或多个属性。 | Represents one or more properties that uniquely identify an entity. | [Key] | System.ComponentModel.DataAnnotations |
Required | 指定数据字段值是必需的。 | Specifying a data field value is required. | [Required] | System.ComponentModel.DataAnnotations |
DefaultValue | 指定属性的默认值。 | Specifies the default value for the property. | [DefaultValue("CURRENT_TIMESTAMP")] | System.ComponentModel |
Description | 指定属性或事件的说明。 | Specifies a description for the property or event. | [Description("name")] | System.ComponentModel |
有Key和Identity标签的int型属性,映射的数据列是自动增长列。
Required、Key标识的字段均为必填,无需重复设置。
没有设置Column标签的属性,会根据数据库品牌,用属性名生成相应形式的列名,也会根据属性的数据类型生成相应的列类型及默认最大长度。
Identity标签(自动增长)只对int类型的列生效,非int类型列设置DefaultValue后,将忽略Identity标签。
设置了Computed标签的属性映射列,在插入和更新时默认值均会被计算,没有设置Computed的默认值只在插入时计算。
插入数据时如果没有设置必填项的数值,该项目也没有默认值,Insert语句将根据“TypeName”的内容自动增加该项目类型的默认值。如果没有设置TypeName,则会根据属性类型分配最接近的字段类型。
使用实体类插入记录时,推荐将映射的属性全部设置为可空类型。原因是实体类里的非空属性会自动产生默认值,有值的字段都会加入SQL语句中。
在使用对象实例插入记录时,如果没有设置映射为时间戳类型字段的属性的值,会由于自动生成了最小时间而无法执行。解决方法1.将属性设置为可空类型。2.时间戳改为时间类型。3.设置该字段映射的属性值在时间戳允许的范围内。
设置为自增长(Identity标签)的int类型的属性(多见于Id字段)建议设置为可空类型“int?”,否则会在sql插入内容中包括值为0的该字段,但是可以执行成功。
批量插入时,有默认值的必填字段映射的属性要全部设置或全部不设置数值。因为参数的集合中有一个对象设置了该字段,就会在SQL语句中出现该字段,其他未设置该字段的记录则因缺少参数而不能执行成功。
An int attribute with Key and Identity tags, and the mapped data column is an auto-growth column.
The fields identified by Required and Key are required and do not need to be set repeatedly.
For attributes without a Column tag, the corresponding column name will be generated from the attribute name according to the database brand, and the corresponding column type and default maximum length will also be generated according to the data type of the attribute.
The Identity label (automatic growth) is only valid for int type columns. After the DefaultValue is set for non-int type columns, the Identity label will be ignored.
For attribute mapping columns with the Computed tag set, the default value will be calculated when inserting and updating, and the default value for which Computed is not set is only calculated when inserting.
If the value of the required item is not set when inserting data, and the item has no default value, the Insert statement will automatically increase the default value of the item type according to the content of "TypeName". If TypeName is not set, the closest field type will be assigned based on the attribute type.
When using the entity class to insert records, it is recommended to set all mapped attributes to nullable types. The reason is that the non-empty attributes in the entity class will automatically generate default values, and the fields with values will be added to the SQL statement.
When inserting a record using an object instance, if the value of the attribute mapped to the timestamp type field is not set, it cannot be executed because the minimum time is automatically generated. Workaround 1. Set the property as a nullable type. 2. Change the timestamp to time type. 3. Set the attribute value of the field mapping within the range allowed by the timestamp.
It is recommended to set the int type attribute (mostly seen in the Id field) to the self-growth (Identity tag) as the nullable type "int?", otherwise the field with a value of 0 will be included in the SQL insertion content, but it can be executed successfully .
When inserting in batches, the attributes mapped to mandatory fields with default values must be set or not set at all. Because there is an object in the set of parameters with this field set, this field will appear in the SQL statement, and other records without this field cannot be executed successfully due to lack of parameters.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- Dapper (>= 2.0.123)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated | |
---|---|---|---|
1.5.9 | 158 | 8/21/2024 | |
1.5.8 | 155 | 8/21/2024 | |
1.5.7 | 165 | 8/20/2024 | |
1.5.6 | 150 | 8/19/2024 | |
1.5.5 | 143 | 8/19/2024 | |
1.5.5-beta9 | 116 | 8/9/2024 | |
1.5.5-beta8 | 82 | 8/8/2024 | |
1.5.5-beta7 | 103 | 8/8/2024 | |
1.5.5-beta6 | 96 | 8/7/2024 | |
1.5.5-beta5 | 86 | 8/6/2024 | |
1.5.5-beta4 | 88 | 8/6/2024 | |
1.5.5-beta3 | 106 | 8/6/2024 | |
1.5.5-beta2 | 83 | 8/5/2024 | |
1.5.5-beta18 | 123 | 8/16/2024 | |
1.5.5-beta17 | 123 | 8/16/2024 | |
1.5.5-beta16 | 118 | 8/15/2024 | |
1.5.5-beta15 | 134 | 8/15/2024 | |
1.5.5-beta14 | 118 | 8/14/2024 | |
1.5.5-beta13 | 119 | 8/12/2024 | |
1.5.5-beta12 | 118 | 8/12/2024 | |
1.5.5-beta11 | 123 | 8/12/2024 | |
1.5.5-beta10 | 119 | 8/11/2024 | |
1.5.5-beta1 | 72 | 7/31/2024 | |
1.5.4 | 103 | 7/30/2024 | |
1.5.3 | 112 | 7/28/2024 | |
1.5.2 | 114 | 7/27/2024 | |
1.5.1 | 113 | 7/26/2024 | |
1.5.0 | 118 | 7/26/2024 | |
1.4.0 | 117 | 7/26/2024 | |
1.3.14 | 141 | 7/18/2024 | |
1.3.13 | 127 | 7/15/2024 | |
1.3.12 | 125 | 7/13/2024 | |
1.3.12-beta9 | 112 | 6/29/2024 | |
1.3.12-beta8 | 98 | 6/29/2024 | |
1.3.12-beta7 | 112 | 6/27/2024 | |
1.3.12-beta6 | 112 | 6/27/2024 | |
1.3.12-beta5 | 103 | 6/26/2024 | |
1.3.12-beta4 | 112 | 6/25/2024 | |
1.3.12-beta3 | 107 | 6/25/2024 | |
1.3.12-beta29 | 87 | 7/12/2024 | |
1.3.12-beta28 | 102 | 7/11/2024 | |
1.3.12-beta27 | 98 | 7/11/2024 | |
1.3.12-beta26 | 117 | 7/8/2024 | |
1.3.12-beta25 | 102 | 7/4/2024 | |
1.3.12-beta24 | 93 | 7/4/2024 | |
1.3.12-beta23 | 86 | 7/4/2024 | |
1.3.12-beta22 | 95 | 7/4/2024 | |
1.3.12-beta21 | 97 | 7/3/2024 | |
1.3.12-beta20 | 91 | 7/3/2024 | |
1.3.12-beta2 | 109 | 6/24/2024 | |
1.3.12-beta19 | 101 | 7/3/2024 | |
1.3.12-beta18 | 90 | 7/3/2024 | |
1.3.12-beta17 | 94 | 7/3/2024 | |
1.3.12-beta16 | 112 | 7/3/2024 | |
1.3.12-beta15 | 97 | 7/3/2024 | |
1.3.12-beta14 | 115 | 7/2/2024 | |
1.3.12-beta13 | 97 | 7/2/2024 | |
1.3.12-beta12 | 109 | 7/2/2024 | |
1.3.12-beta11 | 114 | 7/2/2024 | |
1.3.12-beta10 | 112 | 7/1/2024 | |
1.3.12-beta1 | 116 | 6/23/2024 | |
1.3.11 | 137 | 6/22/2024 | |
1.3.11-beta9 | 166 | 6/20/2024 | |
1.3.11-beta8 | 119 | 6/19/2024 | |
1.3.11-beta7 | 121 | 6/19/2024 | |
1.3.11-beta6 | 117 | 6/18/2024 | |
1.3.11-beta5 | 105 | 6/18/2024 | |
1.3.11-beta4 | 124 | 6/16/2024 | |
1.3.11-beta3 | 127 | 6/16/2024 | |
1.3.11-beta2 | 119 | 6/15/2024 | |
1.3.11-beta12 | 117 | 6/22/2024 | |
1.3.11-beta11 | 115 | 6/21/2024 | |
1.3.11-beta10 | 114 | 6/20/2024 | |
1.3.11-beta1 | 114 | 6/15/2024 | |
1.3.10 | 123 | 6/7/2024 | |
1.3.9 | 141 | 6/6/2024 | |
1.3.9-beta1 | 103 | 6/5/2024 | |
1.3.8 | 143 | 6/4/2024 | |
1.3.7 | 134 | 6/4/2024 | |
1.3.6 | 132 | 6/3/2024 | |
1.3.6-beta5 | 110 | 6/2/2024 | |
1.3.6-beta4 | 117 | 6/2/2024 | |
1.3.6-beta3 | 113 | 6/2/2024 | |
1.3.6-beta2 | 108 | 6/1/2024 | |
1.3.6-beta1 | 117 | 5/26/2024 | |
1.3.5 | 152 | 5/25/2024 | |
1.3.4 | 151 | 5/24/2024 | |
1.3.3 | 172 | 2/22/2024 | |
1.3.3-beta1 | 123 | 2/2/2024 | |
1.3.2 | 154 | 12/19/2023 | |
1.3.2-beta4 | 112 | 12/18/2023 | |
1.3.2-beta3 | 141 | 12/9/2023 | |
1.3.2-beta2 | 109 | 12/9/2023 | |
1.3.2-beta1 | 136 | 12/9/2023 | |
1.3.1 | 209 | 11/3/2023 | |
1.3.1-beta2 | 112 | 11/2/2023 | |
1.3.1-beta1 | 121 | 10/31/2023 | |
1.3.0 | 161 | 10/27/2023 | |
1.3.0-beta8 | 121 | 10/27/2023 | |
1.3.0-beta7 | 128 | 10/26/2023 | |
1.3.0-beta6 | 134 | 10/26/2023 | |
1.3.0-beta5 | 122 | 10/26/2023 | |
1.3.0-beta4 | 115 | 10/25/2023 | |
1.3.0-beta3 | 135 | 10/25/2023 | |
1.3.0-beta2 | 144 | 10/18/2023 | |
1.3.0-beta1 | 125 | 10/16/2023 | |
1.2.5-beta7 | 145 | 10/12/2023 | |
1.2.5-beta6 | 117 | 10/12/2023 | |
1.2.5-beta5 | 122 | 10/12/2023 | |
1.2.5-beta1 | 134 | 9/28/2023 | |
1.2.4 | 165 | 9/21/2023 | |
1.2.4-beta2 | 132 | 9/20/2023 | |
1.2.4-beta1 | 116 | 9/17/2023 | |
1.2.3 | 174 | 9/13/2023 | |
1.2.2 | 189 | 8/28/2023 | |
1.2.2-beta1 | 145 | 8/21/2023 | |
1.2.1 | 183 | 8/8/2023 | |
1.2.0 | 196 | 8/3/2023 | |
1.1.7 | 217 | 7/24/2023 | |
1.1.7-beta9 | 164 | 7/20/2023 | |
1.1.7-beta8 | 167 | 7/20/2023 | |
1.1.7-beta7 | 148 | 7/20/2023 | |
1.1.7-beta6 | 156 | 7/19/2023 | |
1.1.7-beta5 | 167 | 7/18/2023 | |
1.1.7-beta4 | 148 | 7/18/2023 | |
1.1.7-beta3 | 159 | 7/18/2023 | |
1.1.7-beta2 | 154 | 7/17/2023 | |
1.1.7-beta12 | 162 | 7/21/2023 | |
1.1.7-beta11 | 162 | 7/21/2023 | |
1.1.7-beta10 | 168 | 7/21/2023 | |
1.1.7-beta1 | 172 | 7/14/2023 | |
1.1.6 | 217 | 7/13/2023 | |
1.1.6-beta9 | 159 | 7/12/2023 | |
1.1.6-beta8 | 158 | 7/11/2023 | |
1.1.6-beta7 | 148 | 7/11/2023 | |
1.1.6-beta6 | 161 | 7/10/2023 | |
1.1.6-beta5 | 170 | 7/7/2023 | |
1.1.6-beta4 | 148 | 7/7/2023 | |
1.1.6-beta3 | 157 | 7/7/2023 | |
1.1.6-beta2 | 168 | 7/4/2023 | |
1.1.6-beta10 | 175 | 7/13/2023 | |
1.1.6-beta1 | 168 | 6/29/2023 | |
1.1.5 | 201 | 6/28/2023 | |
1.1.5-beta6 | 163 | 6/28/2023 | |
1.1.5-beta5 | 146 | 6/28/2023 | |
1.1.5-beta4 | 140 | 6/25/2023 | |
1.1.5-beta3 | 163 | 6/25/2023 | |
1.1.5-beta2 | 157 | 6/25/2023 | |
1.1.5-beta1 | 155 | 6/25/2023 | |
1.1.4 | 196 | 6/21/2023 | |
1.1.3 | 163 | 6/21/2023 | |
1.1.2 | 179 | 6/20/2023 | |
1.1.1 | 186 | 6/20/2023 | |
1.1.0 | 183 | 6/20/2023 | |
1.1.0-beta9 | 149 | 6/9/2023 | |
1.1.0-beta8 | 142 | 6/9/2023 | |
1.1.0-beta7 | 165 | 6/9/2023 | |
1.1.0-beta6 | 174 | 6/9/2023 | |
1.1.0-beta5 | 146 | 6/9/2023 | |
1.1.0-beta4 | 158 | 6/9/2023 | |
1.1.0-beta3 | 148 | 6/9/2023 | |
1.1.0-beta2 | 166 | 6/9/2023 | |
1.1.0-beta17 | 140 | 6/14/2023 | |
1.1.0-beta16 | 146 | 6/14/2023 | |
1.1.0-beta15 | 158 | 6/14/2023 | |
1.1.0-beta14 | 141 | 6/13/2023 | |
1.1.0-beta13 | 166 | 6/10/2023 | |
1.1.0-beta12 | 172 | 6/10/2023 | |
1.1.0-beta11 | 146 | 6/10/2023 | |
1.1.0-beta10 | 170 | 6/10/2023 | |
1.1.0-beta1 | 174 | 6/9/2023 | |
1.0.13 | 221 | 6/6/2023 | |
1.0.12 | 196 | 6/6/2023 | |
1.0.11 | 169 | 6/5/2023 | |
1.0.10 | 173 | 5/25/2023 | |
1.0.9 | 176 | 5/24/2023 | |
1.0.8 | 158 | 5/22/2023 | |
1.0.7 | 224 | 5/3/2023 | |
1.0.6 | 230 | 3/23/2023 | |
1.0.5 | 252 | 3/19/2023 | |
1.0.4 | 306 | 3/13/2023 | |
1.0.3 | 268 | 3/10/2023 | |
1.0.1 | 403 | 2/11/2023 | |
1.0.0 | 653 | 9/29/2020 |
Three-table queries are allowed.
Fix the problem that the int? type attribute reports an error when querying multiple tables.