返回顶部
首页 > 资讯 > 精选 >LINQ中怎么动态修改表名称
  • 710
分享到

LINQ中怎么动态修改表名称

2023-06-17 21:06:22 710人浏览 泡泡鱼
摘要

LINQ中怎么动态修改表名称,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。LINQ TO SQL动态修改表名称的操作:最近有点空闲时间,抽空看了一下LINQ方面的东西。好在

LINQ中怎么动态修改表名称,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

LINQ TO SQL动态修改表名称的操作:

最近有点空闲时间,抽空看了一下LINQ方面的东西。好在园子里这方面的系列文章很多. 免去了不少查找的时间. 因为本人习惯于学完就动手尝试,而我们的产品中也都将访问数据库sql语句统一封装进了DLL.所以就想先拿产品练一下手:)

但万事开头难,一用上才发现有一个不大不小的问题挡在了面前.就是使用LINQ TO SQL模板生成代码后,会在相应的数据库实体类上绑定一个tablename属性.如下代码:

[Table(Name="dbo.dnt_users")]  public partial class Userinfo :   INotifyPropertyChanging,   INotifyPropertyChanged  {

dnt_users是数据库中的物理表.而我们的产品有一个特性,就是允许用户定制表名称的前缀.其实"dnt_"就是表的前缀名.而这个值(前缀)是通过产品中的Tableprefix属性获取的.Tableprefix属性返回的值是通过dnt.config中配置的.

所以这就要求在程序运行时动态加载表(前缀)名称.所在本人在网上开始四处找这方面的文章和资料.但找到的并不是特别对症。因为才自己动手实验一下,看看有什么好方法:)

LINQ TO SQL动态修改表名称尝试1:

通过常量方式将表属性[Table(Name="dbo.dnt_users")]替换成:

[Table(Name="dbo." + DntDataContext.tableprefix +"users")]

而tabalprefix定义如下:

public const string tableprefix = "dnt_";   [System.Data.Linq.Mapping.  DatabaseAttribute(Name="dnt_2")]  public partial class DntDataContext :   System.Data.Linq.DataContext  {   public const string tableprefix = "dnt_";   }

虽然这种方式将前台的名称抽取出来,将因为是采用常量方式,所以无法进行动态绑定.所以这次尝试是失败的.

LINQ TO SQL动态修改表名称尝试2:

替换DataContext生成的CommandText内容因为LINQ TO SQL最终还是被翻译成SQL,所以本人又使用下面的方法进行测试

DntDataContext ddc = new DntDataContext();  var exp = from u in ddc.Userinfo  orderby u.uid ascending  select u  string query =   ddc.GetCommand(exp).CommandText.Replace("dnt_", "daizhj_");  var result = ddc.ExecuteQuery<Userinfo>(query, 0);  Console.WriteLine(((Userinfo[])   result.ToArray())[0].username);

上面代码段的ddc.GetCommand(exp).CommandText.Replace("dnt_", "daizhj_")是做的这个工作.虽然这次采用替换方式解决了问题.但看了代码的朋友会发现,代码变得很丑,本人也是这么看的.即使封装了也是很难受.没办法,放弃:(

LINQ TO SQL动态修改表名称尝试3: 继承并实现IQuerable接口

好在Matt Warren在他的文章中提到过如果建立一个IQueryable Provider(已修改, 更多内容参见这里).另外LoveCherry也将这篇文章翻译了过来,大家有兴趣不妨看一下,很有意思,  详情点击这里:)

所以本人就直接使用了他在文中所说的方式.将DNTDataContext做了修改如下:

[System.Data.Linq.Mapping.DatabaseAttribute(Name="dnt_2")]  public partial class DntDataContext :   System.Data.Linq.DataContext  {   public Query<Userinfo> Userinfos;   //该Query继承自IQueryable  public DntDataContext(System.Data.IDbConnection connection) :  base(connection, mappingSource)   {  QueryProvider provider =   new DbQueryProvider((DbConnection)connection);  this.Userinfos = new Query<Userinfo>(provider);   }  }

前端使用代码如下:

using (SqlConnection con =   new SqlConnection(global::Demo.Properties.  Settings.Default.dnt_2ConnectionString))  {   con.Open();   DntDataContext ddc = new DntDataContext(con);    IQueryable<Userinfo> query = from u in ddc.Userinfos  where (u.uid > 1)  select u;   foreach (Userinfo user in query.ToArray())   {  Console.WriteLine(user.username);   }    Console.ReadLine();  }

当然数据库链接对象可以封装到DntDataContext中,让代码的整体感觉更LINQ一些.相关的代码下载会在本文结尾处给出,详见LINQ.KIT代码中DbQueryProvider.cs文件.(相关修改已通过注释给出).

这次改动整体上能够满足查询上的需求,但是如果想使用相应的insert,update,delete也能做到相应的表名替换的话,还是要从System.Data.Linq.Table入手.即让

using (SqlConnection con = new SqlConnection(  global::Demo.Properties.Settings.  Default.dnt_2ConnectionString))  {    con.Open();    DntDataContext ddc = new DntDataContext(con);    IQueryable<Userinfo> query = from u in ddc.Userinfos  where (u.uid > 1)  select u;     foreach (Userinfo user in query)   {  Console.WriteLine(user.username);   }    Console.ReadLine();  }

返回的Userinfo类所绑定的表是被替换完成的表名称. 因为本人时间和精力有限,无法再去做进一步的研究了.但老赵的这篇文章给了我一些启发.其中下面的代码段就是他用来扩展DELETE功能的方法

 public static int Delete<TEntity>  (this Table<TEntity> table,   Expression<Func<TEntity, bool>> predicate)  where TEntity : class  {  string tableName =   table.Context.Mapping.GetTable(  typeof(TEntity)).TableName;  string command = String.FORMat(  "DELETE FROM {0}", tableName);   ConditionBuilder conditionBuilder =   new ConditionBuilder();  conditionBuilder.Build(predicate.Body);   if (!String.IsNullOrEmpty(  conditionBuilder.Condition))  {   command += " WHERE " + conditionBuilder.Condition;  }   return table.Context.ExecuteCommand(  command, conditionBuilder.Arguments);  }

关于LINQ中怎么动态修改表名称问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: LINQ中怎么动态修改表名称

本文链接: https://lsjlt.com/news/293565.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • LINQ中怎么动态修改表名称
    LINQ中怎么动态修改表名称,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。LINQ TO SQL动态修改表名称的操作:最近有点空闲时间,抽空看了一下LINQ方面的东西。好在...
    99+
    2023-06-17
  • mysql中怎么修改表名称
    mysql中修改表名称的示例:打开命令行窗口,输入命令:“mysql -u root -p”。再输入密码,进入mysql。输入命令“alter table user rename user1;”即可。意思:将user表名修改为user1....
    99+
    2024-04-02
  • plsql怎么修改表字段名称
    在PL/SQL中,可以使用ALTER TABLE语句来修改表字段的名称。语法如下:ALTER TABLE table_name RE...
    99+
    2023-10-11
    plsql
  • oracle怎么修改表字段名称
    要修改表字段名称,可以使用ALTER TABLE语句。以下是一个示例: ALTER TABLE table_name RENAME ...
    99+
    2024-04-09
    oracle
  • weblogic怎么修改域名名称
    要修改WebLogic域的名称,需要执行以下步骤: 停止WebLogic域。可以使用stopWebLogic.sh(Linux/...
    99+
    2024-04-09
    weblogic
  • centos中怎么修改磁盘名称
    在CentOS中,可以通过以下步骤修改磁盘名称: 查看当前系统中的磁盘信息: lsblk 找到需要修改名称的磁盘的设备路径...
    99+
    2024-03-07
    centos
  • 怎么修改mysql列名称
    这篇文章主要介绍了怎么修改mysql列名称,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。修改mysql列名称的方法:首先选定一个要操作的数据表,...
    99+
    2024-04-02
  • jquery怎么修改class名称
    这篇文章主要介绍“jquery怎么修改class名称”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery怎么修改class名称”文章能帮助大家解决问题。具体步骤如下:首先,新建一个html项目...
    99+
    2023-06-05
  • linux怎么修改串口名称
    要修改Linux系统中的串口名称,可以按照以下步骤操作: 打开终端窗口,输入以下命令以编辑udev规则文件: sudo nano...
    99+
    2023-10-24
    linux
  • gitlab怎么修改账号名称
    GitLab是一个强大的代码托管平台。当您在GitLab上注册一个账号后,有时候您可能需要修改自己的账号名称。这篇文章将向您介绍如何修改GitLab账号名称。登录GitLab账号首先,您需要登录您的GitLab账号。进入账户设置在页面右上角...
    99+
    2023-10-22
  • git怎么修改分支名称
    Git是一种分布式版本控制系统,常常用于多人协作开发。在Git中,分支是非常重要的概念。每个开发者都可以新建并切换到不同的分支来开发和测试不同的特性。但是,有时候我们会发现自己的分支名称并不太合适,需要修改分支名称。那么,Git分支名称如何...
    99+
    2023-10-22
  • mysql怎么修改字段名称
    在MySQL中,可以使用ALTER TABLE语句来修改字段名称。语法如下:mysqlALTER TABLE table_name ...
    99+
    2023-10-20
    mysql
  • linux怎么修改设备名称
    在Linux系统中,可以通过以下步骤来修改设备名称: 打开终端,以管理员身份登录系统。 使用以下命令查看当前设备的名称: s...
    99+
    2024-02-29
    linux
  • gbase怎么修改字段名称
    在gbase中修改字段名称可以通过ALTER TABLE语句来实现。具体步骤如下: 打开gbase客户端,连接到相应的数据库。 ...
    99+
    2024-03-15
    gbase
  • mongodb怎么修改集合名称
    要修改MongoDB中的集合名称,可以使用db.collection.renameCollection()方法。以下是如何修改集合名...
    99+
    2024-04-09
    mongodb
  • navicat怎么修改连接名称
    要修改 navicat 中的连接名称,请依次执行以下步骤:右键单击要修改名称的连接,选择“连接属性”。在“连接属性”窗口中,清除“名称”字段中的现有名称并输入新名称。单击“确定”按钮保存...
    99+
    2024-04-24
    navicat
  • sql怎么修改字段名称
    要修改数据库表的字段名称,可以使用ALTER TABLE语句,如下所示: ALTER TABLE table_name CHANGE...
    99+
    2024-05-21
    sql
  • oracle如何修改表空间名称
    要修改Oracle数据库中的表空间名称,可以通过以下步骤实现: 首先,确保没有任何会话正在使用要修改的表空间。可以通过查询V$S...
    99+
    2024-04-23
    oracle
  • oracle中怎么修改表名
    小编给大家分享一下oracle中怎么修改表名,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!oracle如何修改表名方式一alter table old_table_name...
    99+
    2024-04-02
  • Oracle怎么修改数据库名称
    这篇文章主要讲解了“Oracle怎么修改数据库名称”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle怎么修改数据库名称”吧!1.关闭监听,正常关闭O...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作