SqlSugar学习总结5(映射)

常用的映射方式有两种:DbFirst、CodeFirst

DbFirst:数据库优先,先在数据库中建好表,然后去自动生成代码的实体类。

CodeFirst:代码优先,先在代码中定义好实体类,然后自动在数据库生成表结构。

创建一个控制台项目,引用程序集SqlSugarCode

DbFirst实例:

数据库有两张已经建好的表

 

代码生成实体类

using SqlSugar;
using System;

namespace SqlSugarStart.DbFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            show();
        }


        public static void show()
        {
            try
            {
                SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
                {
                    DbType = DbType.SqlServer,//要连接的数据库类型
                    ConnectionString = "server=.;uid=sa;pwd=123456;database=SqlSugarTest",
                    InitKeyType = InitKeyType.SystemTable,//初始化主键和自增列信息到orm的方式
                });

                sqlSugarClient.DbFirst.CreateClassFile(@"D:\Code\杨中科.NetCore\SqlSugarStart\SqlSugarStart.DbFirst\DbModels");
            }
            catch (Exception)
            {
                throw;
            }
        }

    }
}

在生成的类中可以看到不止两个,这是因为程序自动把数据库中所有的表都生成了,包括系统表。

 

其实想要的只有自己定义的两张表,那就需要使用where条件,选择要生成的表。例如下面实例代码中写的,只生成表名称以C开头的表。

using SqlSugar;
using System;

namespace SqlSugarStart.DbFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            show();
        }


        public static void show()
        {
            try
            {
                SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
                {
                    DbType = DbType.SqlServer,//要连接的数据库类型
                    ConnectionString = "server=.;uid=sa;pwd=123456;database=SqlSugarTest",
                    InitKeyType = InitKeyType.SystemTable,//初始化主键和自增列信息到orm的方式
                });

                //sqlSugarClient.DbFirst.CreateClassFile(@"D:\Code\杨中科.NetCore\SqlSugarStart\SqlSugarStart.DbFirst\DbModels");
                sqlSugarClient.DbFirst.Where(c => c.StartsWith("C")).CreateClassFile(@"D:\Code\杨中科.NetCore\SqlSugarStart\SqlSugarStart.DbFirst\DbModels");
            }
            catch (Exception)
            {
                throw;
            }
        }

    }
}

执行结果如下,只有一张表生成了对应实体类。

 

CodeFirst实例:

定义一个实体类

using SqlSugar;

namespace SqlSugarStart.CodeFirst.DbModels
{
    [SugarTable("Student")]
    public class Student
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Name { get; set; }
        public int age { get; set; }
    }

}

生成数据库和表

using SqlSugar;
using SqlSugarStart.CodeFirst.DbModels;
using System;

namespace SqlSugarStart.CodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            show();
        }

        public static void show()
        {
            try
            {
                SqlSugarClient sqlSugarClient = new SqlSugarClient(new ConnectionConfig
                {
                    DbType = DbType.SqlServer,//要连接的数据库类型
                    ConnectionString = "server=.;uid=sa;pwd=123456;database=SqlSugarCodeFirst",//sqlsqver数据库链接字符串
                    IsAutoCloseConnection = true
                });

                #region 创建数据库和表的语句仅执行一次
                sqlSugarClient.DbMaintenance.CreateDatabase(); //创建数据库
                sqlSugarClient.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Student));//创建表
                #endregion
            }
            catch (Exception)
            {
                throw;
            }
        }
    }
}

执行结果:

 自动在数据库中创建了名称为SqlSugarCodeFirst的数据库,并创建了名称为Student的表。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你在一个数据库中有两个名相同的,你可以使用 SQLSugar 的 `DbMapping` 属性来映射名,以便在代码中使用不同的名称引用它们。 例如,假设你有两个名都是 `User` 的,一个在 `DB1` 数据库中,另一个在 `DB2` 数据库中。你可以这样映射它们: ```csharp // 定义一个 User 类来中的数据 public class User { public int Id { get; set; } public string Name { get; set; } } // 配置数据库连接字符串 var db1 = new SqlSugarClient(new ConnectionConfig { ConnectionString = "server=.;database=DB1;uid=sa;pwd=123456", DbType = DbType.SqlServer, IsAutoCloseConnection = true }); var db2 = new SqlSugarClient(new ConnectionConfig { ConnectionString = "server=.;database=DB2;uid=sa;pwd=123456", DbType = DbType.SqlServer, IsAutoCloseConnection = true }); // 映射名 db1.MappingTables.Add("User", "User1"); db2.MappingTables.Add("User", "User2"); // 在代码中使用不同的名称引用 var users1 = db1.Queryable<User>().ToList(); // 查询 DB1 中的 User1 var users2 = db2.Queryable<User>().ToList(); // 查询 DB2 中的 User2 ``` 在这个例子中,我们使用 `MappingTables` 属性将 `User` 映射为 `User1` 和 `User2` 。然后,我们可以在代码中使用不同的名称引用。 注意,如果你使用了 `DbFirst` 或 `CodeFirst` 生成了实体类,你也可以通过在实体类上使用 `SugarTable` 特性来映射名。例如: ```csharp [SugarTable("User1")] // 映射为 User1 public class User1 { public int Id { get; set; } public string Name { get; set; } } [SugarTable("User2")] // 映射为 User2 public class User2 { public int Id { get; set; } public string Name { get; set; } } ``` 然后你可以像普通的实体类一样使用它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值