検索
ホームページデータベースmysql チュートリアル[.NET] Titan ORM 中执行数据添加Insert-快速示例

本 示例 使用SqlServer2005,先在 数据 库中创建一张表, 其中CustomerId是主键且自动增长;CustomerType用来保存int枚举,字段类型使用int;InsertTime将系统时间作为默认值 CREATE TABLE [ Customer ] ( [ CustomerId ] [ int ] IDENTITY ( 1 , 1 ) NOT NU

示例使用SqlServer2005,先在数据库中创建一张表,

其中CustomerId是主键且自动增长;CustomerType用来保存int枚举,字段类型使用int;InsertTime将系统时间作为默认值

<span>CREATE</span> <span>TABLE</span> <span>[</span><span>Customer</span><span>]</span><span>(
    </span><span>[</span><span>CustomerId</span><span>]</span> <span>[</span><span>int</span><span>]</span> <span>IDENTITY</span>(<span>1</span>,<span>1</span>) <span>NOT</span> <span>NULL</span><span>,
    </span><span>[</span><span>CustomerName</span><span>]</span> <span>[</span><span>nvarchar</span><span>]</span>(<span>50</span>) <span>NOT</span> <span>NULL</span><span>,
    </span><span>[</span><span>CustomerType</span><span>]</span> <span>[</span><span>int</span><span>]</span> <span>NOT</span> <span>NULL</span><span>,
    </span><span>[</span><span>Description</span><span>]</span> <span>[</span><span>int</span><span>]</span> <span>NULL</span><span>,
    </span><span>[</span><span>InsertTime</span><span>]</span> <span>[</span><span>datetime</span><span>]</span> <span>NOT</span> <span>NULL</span> <span>default</span>(<span>getdate</span>()), <span>--</span><span>用于测试在<strong>数据</strong>库中设置默认值</span>
    <span>CONSTRAINT</span> <span>[</span><span>PK_Customer</span><span>]</span> <span>PRIMARY</span> <span>KEY</span>(<span>[</span><span>CustomerId</span><span>]</span><span>)
) </span><span>ON</span> <span>[</span><span>PRIMARY</span><span>]</span>

接下来创建相应的实体类,可以使用枚举:

<span>    public</span> <span>enum</span><span> CustomerType
    {
        Home, Abroad
    }

    [Table]
    </span><span>public</span> <span>class</span><span> Customer
    {
        [Column(IsPrimaryKey</span>=<span>true</span><span>)]
        [SqlServerColumn(IsIdentity</span>=<span>true</span>)]<span>//</span><span>针对SqlServer特有的标识列</span>
        <span>public</span> <span>int</span> CustomerId { <span>get</span>; <span>set</span><span>; } 

        [Column]
        </span><span>public</span> <span>string</span> CustomerName { <span>get</span>; <span>set</span><span>; } 

        [Column]
        </span><span>public</span> CustomerType CustomerType { <span>get</span>; <span>set</span><span>; }

        [Column]
        </span><span>public</span> <span>string</span> Description { <span>get</span>; <span>set</span><span>; }

        [Column]
        [SqlServerColumn(GenerateInsert</span>=AttributeBoolean.False)]<span>//<strong>数据</strong>库中已有默认值,</span><span>告诉Titan在生成Insert语句时不要包含本列</span>
        <span>public</span> DateTime InsertTime { <span>get</span>; <span>set</span><span>; } 
    }</span>

使用Titan往数据库中添加一条记录:

<span>    class</span><span> Program
    {
        </span><span>static</span> <span>void</span> Main(<span>string</span><span>[] args)
        {
            IDbSession se </span>=<span> OpenDbSession();

            Customer customer </span>= <span>new</span><span> Customer();
            customer.CustomerName </span>= <span>"</span><span>customer name</span><span>"</span><span>;
            customer.CustomerType </span>=<span> CustomerType.Abroad;

            se.Insert(customer);
            Console.WriteLine(</span><span>string</span>.Format(<span>"</span><span><strong>执行</strong>Insert后标识列返回的CustomerId={0}</span><span>"</span><span>,customer.CustomerId));

            se.Close();

            Console.ReadLine();
        }

        </span><span>static</span><span> IDbSession OpenDbSession()
        {
            </span><span>//</span><span>使用SqlServer。如果是其它<strong>数据</strong>库则可以使用:OracleSqlProvider,MySqlSqlProvider,SQLiteSqlProvider...</span>
            Type providerType = <span>typeof</span><span>(SqlServerSqlProvider);

            </span><span>//</span><span><strong>数据</strong>库连接支付串</span>
            <span>string</span> connectionString = <span>@"</span><span>Data Source=192.168.17.129\SQLEXPRESS;Initial Catalog=titandemo;User Id=sa;Password=123456;</span><span>"</span><span>;

            </span><span>//</span><span>sql语句追踪,可以跟踪Titan生成的Sql语句,此处使用控制台中查看生成的Sql语句</span>
            ISqlTracer[] sqlTracers = <span>new</span> ISqlTracer[] { <span>new</span><span> ConsoleSqlTracer() };

            </span><span>return</span><span> DbSessionFactory.CreateAndOpenSession(providerType, connectionString, sqlTracers); 
        }
    }</span>

查看数据库已经添加成功:

控制台程序运行截屏:

从中可以看到生成的Sql语句中不包含CustomerId列和InsertTime列,

由于CustomerId使用了[SqlServerColumn(IsIdentity=true)]标注,Titan在生成Insert语句时不会包含此列,默认情况下还会在Insert语句中包含set @4=SCOPE_Identity()用以取回数据库自动生成的值。

另外数据库中InsertTime列使用了默认值,并且实体类属性中使用了[SqlServerColumn(GenerateInsert=AttributeBoolean.False)]标注,因此生成的Sql语句中也不包含此列。 

关于IsIdentity=true标注,如果在[Column]标注中强制不返回,那么Insert语句中set @4=SCOPE_Identity()语句不会被生成。代码如下(注意红色部分):

<span>    [Table]
    </span><span>public</span> <span>class</span><span> Customer
    {
        [Column(IsPrimaryKey </span>= <span>true</span>, <span>ReturnAfterInsert =</span><span><span> AttributeBoolean.False</span>)]
        [SqlServerColumn(IsIdentity </span>= <span>true</span>)]<span>//</span><span>针对SqlServer特有的标识列</span>
        <span>public</span> <span>int</span> CustomerId { <span>get</span>; <span>set</span>; }

再运行程序,发现Insert语句中不再包含set @4=SCOPE_Identity(),CustomerId的值仍为0。

 

 

 

 

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python中的ORM框架Tortoise ORM实战Python中的ORM框架Tortoise ORM实战Jun 10, 2023 pm 06:05 PM

TortoiseORM是一个基于Python语言开发的异步ORM框架,可用于Python异步应用程序中管理关系数据库。本文将介绍如何使用TortoiseORM框架来创建、读取、更新和删除数据,同时还将学习如何从关系数据库中执行简单和复杂的查询。准备工作在开始本教程之前,你需要安装Python(建议使用Python3.6+),同时安装TortoiseOR

PHP中的ORMPHP中的ORMMay 24, 2023 am 08:14 AM

随着互联网的发展,Web应用程序的开发逐渐得到了广泛应用。而其中最主要的语言之一便是PHP。然而,对于数据的管理处理却一直是开发者面临的难题。为此,ORM成为了数据处理的一个不错的选择。什么是ORM?ORM全称为Object-RelationalMapping(对象关系映射),它是一种通过使用描述对象和数据库之间映射的元数据,将面向对象编程语言程序中的对象

分享几个.NET开源的AI和LLM相关项目框架分享几个.NET开源的AI和LLM相关项目框架May 06, 2024 pm 04:43 PM

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

C#的就业前景如何C#的就业前景如何Oct 19, 2023 am 11:02 AM

无论您是初学者还是有经验的专业人士,掌握C#将为您的职业发展铺平道路。

如何在Phalcon框架中使用ORM(对象关系映射)?如何在Phalcon框架中使用ORM(对象关系映射)?Jun 03, 2023 pm 09:21 PM

随着Web应用程序的不断发展,相应的Web开发框架也不断涌现。其中Phalcon框架因其高性能和灵活性受到了越来越多开发者的青睐。Phalcon框架提供了许多有用的组件,其中ORM(对象关系映射)被认为是最为重要的之一。本文将介绍如何在Phalcon框架中使用ORM以及一些实际应用示例。什么是ORM首先,我们需要了解什么是ORM。ORM是Object-Rel

对象关系映射(ORM)基础知识:了解Doctrine ORM对象关系映射(ORM)基础知识:了解Doctrine ORMJun 19, 2023 pm 03:43 PM

对象关系映射(ORM)基础知识:了解DoctrineORM当我们开发应用程序的时候,我们需要对数据库进行操作来存储和获取数据。但是,直接使用原始的数据库查询代码很不方便。我们需要将对象和数据之间建立映射关系,这就是ORM的作用。ORM将对象和数据库表之间自动进行映射和转换,可以轻松地进行数据操作,使得我们的代码更加容易维护。DoctrineORM是PHP

Java框架和.NET框架的性能差异Java框架和.NET框架的性能差异Jun 03, 2024 am 09:19 AM

在高并发请求处理方面,.NETASP.NETCoreWebAPI性能优于JavaSpringMVC,原因包括:AOT提前编译,减少启动时间;更精细的内存管理,由开发人员负责分配和释放对象内存。

java中orm框架有哪些java中orm框架有哪些May 04, 2023 am 11:55 AM

1.Hiberante面向对象的ORM,学习成本比较高。2.Mybatis半自动orm框架,需要自己写sql,方便sql与java代码分离。这里所谓的“半自动”是相对于Hibernate框架全表映射而言的,MyBatis框架需要手动匹配提供POJO、SQL和映射关系,而Hibernate框架只需提供POJO和映射关系即可。3.Bee一个新的ORM框架,同时具体Hiberante和Mybatis的优点。既可像Hibernate一样通过操作对象来操作数据库,也可以像Mybatis一样灵活写sql4.

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境