[.NET] Titan ORM 中执行数据添加Insert-快速示例

php中文网
发布: 2016-06-07 15:07:56
原创
1338人浏览过

本 示例 使用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语句中也不包含此列。 

论小文
论小文

可靠的论文写作助手,包含11种学术写作类型,万字论文一键生成,可降重降AIGC,参考文献真实可标注,图表代码均可自定义添加。

论小文 431
查看详情 论小文

关于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。

 

 

 

 

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号