在这篇文章中,将探讨如何使用.NETSymbiotic Micro ORM来与SQL Server数据库进行交互。Symbiotic是一个支持多种数据库供应商的.NET ORM,包括SQL Server、SQL Azure、MySQL、SQLite、Oracle、PostgreSQL、Firebird和DB2/LUW。本文将重点介绍SQL Server数据库,并假设已经具备了C#和SQL Server的基础知识。
在开始之前,需要一个SQL Server数据库。它可以是一个本地数据库文件、服务器数据库或Azure SQL数据库。请确保项目构建为x64。可以在Visual Studio的菜单中找到:“构建 \ 配置管理器”。
运行以下SQL脚本以创建将在本文中使用的表。
CREATE TABLE [dbo].[SimpleEntities](
[EntityId] [int] IDENTITY(1,1) NOT NULL,
[Description] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_SimpleEntities] PRIMARY KEY CLUSTERED (
[EntityId] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
) ON [PRIMARY]
在Visual Studio中创建一个新的C#控制台项目,目标框架为.NET4.6.1或更高版本。然后添加NuGet包"Symbiotic_Micro_ORM_Net_Standard_x64"。可以通过主菜单:"项目 \ 管理Nuget包..."来添加。添加后可能需要在"解决方案资源管理器"中刷新项目以更新引用。
在"Program"类的顶部添加以下using语句:
using FrozenElephant.Symbiotic;
using FrozenElephant.Symbiotic.DataProviderSqlServer;
向项目中添加一个名为"SimpleEntity"的新类。这个类将用于表示在步骤1中创建的表。请将"SimpleEntity"类的代码替换或修改为以下内容:
[Serializable, DatabaseTable("SimpleEntities"), DebuggerDisplay("SimpleEntity: EntityId= {EntityId}, Description= {Description}")]
public class SimpleEntity
{
[DatabaseColumn("EntityId", IsPrimaryKey = true, IsIdentityColumn = true)]
public int EntityId { get; set; }
[DatabaseColumn("Description")]
public string Description { get; set; }
}
在"Main"方法的开始处添加以下代码行。这些行初始化工厂类并设置数据库连接字符串。需要修改连接字符串以匹配数据库、服务器和用户/密码。
_DBTypesFactory = new DatabaseTypesFactorySqlServer();
_DBTypesFactory.ConnectionString = "Data Source=yourServer;Initial Catalog=yourDatabase;User ID=yourUserID;Password=yourPassword;Connect Timeout=35;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False;MultipleActiveResultSets=true;Enlist=false";
在"Main"方法的末尾添加以下代码行。前两行创建了"SimpleEntity"类的新实例并填充了描述。第三行创建了一个名为"writer"的IObjectWriter实例,它将用于将项目写入数据库。最后一行将"SimpleEntity"中的数据写入数据库。
SimpleEntity newItem = new SimpleEntity();
newItem.Description = "Description " + DateTime.Now.ToString();
IObjectWriter writer = _DBTypesFactory.CreateObjectWriter();
writer.Create(newItem);
在"Main"方法的末尾添加以下代码行。第一行创建了一个名为"loader"的IObjectLoader实例,它将用于从数据库中读取项目。最后一行使用loader从数据库中检索记录,作为一个填充了的"SimpleEntity"实例存储在loadedItem变量中。
IObjectLoader loader = _DBTypesFactory.CreateObjectLoader();
SimpleEntity loadedItem = loader.ObtainItem(newItem.EntityId);
在"Main"方法的末尾添加以下代码行。前两行修改了名为"newItem"的SimpleEntity实例的Description。最后一行将"newItem"实例的新数据写入数据库:
string newDesc = "Updated " + DateTime.Now.ToString();
newItem.Description = newDesc;
writer.Update(newItem);
在"Main"方法的末尾添加以下代码行。前两行修改了名为"newItem"的SimpleEntity实例的Description。最后一行将根据记录是否存在来插入或更新"newItem"实例的记录。
string newDesc2 = "Updated " + DateTime.Now.ToString();
newItem.Description = newDesc2;
writer.InsertUpdate(newItem);
在"Main"方法的末尾添加以下代码行。这行代码将从数据库中删除"newItem"实例:
writer.Delete(newItem);
第一行是一个标准的SQL,用于返回"SimpleEntities"表中的所有记录。第二行创建了一个ISqlQuery实例,用于运行查询。第三行运行查询并返回一个SimpleEntity项目的集合。请注意,如果没有记录,集合将为空。
string sql = "Select * from simpleEntities";
ISqlQuery query = _DBTypesFactory.CreateSqlQuery(sql, "My simple sql");
IList items = loader.ObtainItems(query);
第一行创建了一个带有名为"max"的参数的参数化SQL语句。第二行创建了一个ISqlQuery实例,用于运行查询。第三行创建了一个参数,并将参数加载到查询中,值为"3"。第四行运行查询并返回一个SimpleEntity项目的集合。请注意,如果没有记录匹配查询的where子句,那么集合将为空。
string sql2 = "Select * from simpleEntities where EntityId > @max";
ISqlQuery query2 = _DBTypesFactory.CreateSqlQuery(sql2, "My simple sql");
query2.CreateAndAddParameter(_DBTypesFactory, DbType.Int32, "max", 3);
IList items2 = loader.ObtainItems(query2);
本文仅触及了"Symbiotic"ORM功能的表面。有关更高级功能的细节和示例,请下载NuGet包,并查看包文件夹中的示例项目。