编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

常用ORM框架实例

wxchong 2024-06-28 10:28:52 开源技术 11 ℃ 0 评论

这里是每个框架的一个示例代码片段:

Entity Framework Core (EF Core)

模型类

using System.ComponentModel.DataAnnotations;

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
}

DbContext 配置

using Microsoft.EntityFrameworkCore;

public class MyDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("YourConnectionString");
    }
}

CRUD 操作

using (var context = new MyDbContext())
{
    // 创建
    var product = new Product
    {
        Name = "New Product",
        Price = 9.99m,
        CategoryId = 1
    };

    context.Products.Add(product);
    context.SaveChanges();

    // 读取
    var productById = context.Products.Find(1);

    // 更新
    productById.Name = "Updated Product";
    context.SaveChanges();

    // 删除
    context.Products.Remove(productById);
    context.SaveChanges();
}

Dapper

模型类

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
}

Dapper 连接和查询

using System.Data.SqlClient;
using Dapper;

var connectionString = "YourConnectionString";
using (var connection = new SqlConnection(connectionString))
{
    connection.Open();

    // 创建
    var insertQuery = "INSERT INTO Products (Name, Price, CategoryId) VALUES (@Name, @Price, @CategoryId); SELECT SCOPE_IDENTITY();";
    var productId = connection.ExecuteScalar<int>(insertQuery, new { Name = "New Product", Price = 9.99m, CategoryId = 1 });

    // 读取
    var selectQuery = "SELECT * FROM Products WHERE Id = @Id";
    var product = connection.QueryFirstOrDefault<Product>(selectQuery, new { Id = productId });

    // 更新
    var updateQuery = "UPDATE Products SET Name = @Name, Price = @Price WHERE Id = @Id";
    connection.Execute(updateQuery, new { Name = "Updated Product", Price = 10.99m, Id = productId });

    // 删除
    var deleteQuery = "DELETE FROM Products WHERE Id = @Id";
    connection.Execute(deleteQuery, new { Id = productId });
}

NHibernate

映射文件

在 NHibernate 中,通常会使用 XML 或 Fluent NHibernate 来配置映射。以下是一个简单的 XML 映射示例:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Product" table="Products">
    <id name="Id" column="Id" type="int">
      <generator class="native"/>
    </id>
    <property name="Name" column="Name" type="string"/>
    <property name="Price" column="Price" type="decimal"/>
    <property name="CategoryId" column="CategoryId" type="int"/>
  </class>
</hibernate-mapping>

NHibernate 配置和 CRUD 操作

using NHibernate;
using NHibernate.Cfg;

var cfg = new Configuration();
cfg.Configure(); // 加载 hibernate.cfg.xml 配置文件
cfg.AddAssembly(typeof(Product).Assembly); // 注册映射

var sessionFactory = cfg.BuildSessionFactory();
using (var session = sessionFactory.OpenSession())
using (var transaction = session.BeginTransaction())
{
    // 创建
    var product = new Product
    {
        Name = "New Product",
        Price = 9.99m,
        CategoryId = 1
    };

    session.Save(product);
    transaction.Commit();

    // 读取
    var productById = session.Get<Product>(product.Id);

    // 更新
    productById.Name = "Updated Product";
    session.Update(productById);
    transaction.Commit();

    // 删除
    session.Delete(productById);
    transaction.Commit();
}

LLBLGen Pro

实体类

LLBLGen Pro 会根据数据库表自动生成实体类,或者你可以自定义实体类。

数据访问代码

using LLBLGen.Pro.Data.Common;
using LLBLGen.Pro.ORMSampleEntities;

var adapter = new DataAccessAdapter();

// 创建
var product = new Product();
product.Name = "New Product";
product.Price = 9.99m;
product.CategoryId = 1;
adapter.SaveEntity(product, false);

// 读取
var productId = product.ProductId;
var readProduct = new Product();
readProduct.ProductId = productId;
adapter.FetchEntity(readProduct, false);

// 更新
readProduct.Name = "Updated Product";
readProduct.Price = 10.99m;
adapter.UpdateEntity(readProduct);

// 删除
adapter.DeleteEntity(readProduct);

每个框架都有其独特的特点和使用场景,选择合适的框架取决于项目的具体需求、开发团队的熟悉程度以及对性能的要求。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表