广告
返回顶部
首页 > 资讯 > 精选 >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://www.lsjlt.com/news/293565.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 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+
    2022-10-20
  • plsql怎么修改表字段名称
    在PL/SQL中,可以使用ALTER TABLE语句来修改表字段的名称。语法如下:ALTER TABLE table_name RE...
    99+
    2023-10-11
    plsql
  • 怎么修改mysql列名称
    这篇文章主要介绍了怎么修改mysql列名称,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。修改mysql列名称的方法:首先选定一个要操作的数据表,...
    99+
    2022-10-18
  • jquery怎么修改class名称
    这篇文章主要介绍“jquery怎么修改class名称”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery怎么修改class名称”文章能帮助大家解决问题。具体步骤如下:首先,新建一个html项目...
    99+
    2023-06-05
  • mysql怎么修改字段名称
    在MySQL中,可以使用ALTER TABLE语句来修改字段名称。语法如下:mysqlALTER TABLE table_name ...
    99+
    2023-10-20
    mysql
  • gitlab怎么修改账号名称
    GitLab是一个强大的代码托管平台。当您在GitLab上注册一个账号后,有时候您可能需要修改自己的账号名称。这篇文章将向您介绍如何修改GitLab账号名称。登录GitLab账号首先,您需要登录您的GitLab账号。进入账户设置在页面右上角...
    99+
    2023-10-22
  • linux怎么修改串口名称
    要修改Linux系统中的串口名称,可以按照以下步骤操作: 打开终端窗口,输入以下命令以编辑udev规则文件: sudo nano...
    99+
    2023-10-24
    linux
  • git怎么修改分支名称
    Git是一种分布式版本控制系统,常常用于多人协作开发。在Git中,分支是非常重要的概念。每个开发者都可以新建并切换到不同的分支来开发和测试不同的特性。但是,有时候我们会发现自己的分支名称并不太合适,需要修改分支名称。那么,Git分支名称如何...
    99+
    2023-10-22
  • Oracle怎么修改数据库名称
    这篇文章主要讲解了“Oracle怎么修改数据库名称”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle怎么修改数据库名称”吧!1.关闭监听,正常关闭O...
    99+
    2022-10-18
  • navicat怎么修改数据库名称
    navicat中修改数据库名称的方法:1、打开Navicat工具;2、点击左上角“连接”菜单,连接数据库;3、双击打开需要操作的数据库;4、鼠标右键选中需要修改名称的数据库,选择“重命名”即可修改。具体操作步骤:在电脑桌面,双击navica...
    99+
    2022-10-14
  • 怎么修改mysql数据库名称
    修改mysql数据库名称的方法:重命名所有的表,代码:CREATE DATABASE new_db_name;RENAME TABLE db_name.table1 TO new_...
    99+
    2022-10-08
  • uniapp怎么修改app应用名称
    近年来,随着移动互联网的快速发展,移动端应用程序成为人们生活中不可或缺的一部分。对于开发者们来说,开发属于自己的应用程序既是一种挑战,也是一项非常有意义的工作。但是,对于很多初学者来说,不懂得如何修改应用程序的名称可能会让他们感到非常困扰。...
    99+
    2023-05-14
  • mongodb怎么修改数据库名称
    要修改MongoDB中的数据库名称,可以按照以下步骤进行操作: 连接到MongoDB服务器。 切换到要修改的数据库。 运行命令`d...
    99+
    2023-10-27
    mongodb 数据库
  • linux怎么修改文件夹名称
    在Linux中,可以使用`mv`命令来修改文件夹的名称。语法如下:```bashmv 原文件夹名目标文件夹名```例如,将名为`ol...
    99+
    2023-08-08
    linux
  • oracle中怎么修改表名
    小编给大家分享一下oracle中怎么修改表名,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!oracle如何修改表名方式一alter table old_table_name...
    99+
    2022-10-18
  • linux怎么修改网卡设备名称
    要修改Linux上的网卡设备名称,可以按照以下步骤进行操作:1. 查看当前网卡的设备名称。可以使用`ifconfig`或者`ip a...
    99+
    2023-09-14
    linux
  • Maven怎么修改打包文件名称
    这篇文章主要讲解了“Maven怎么修改打包文件名称”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Maven怎么修改打包文件名称”吧!Maven修改打包文件名称对Maven打出的jar包名称不...
    99+
    2023-07-05
  • linux系统中怎么修改服务器名称
    这期内容当中小编将会给大家带来有关linux系统中怎么修改服务器名称,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。修改主机名,需要更改两个文件: /etc/hostname /etc/hosts 在hos...
    99+
    2023-06-13
  • 腾讯云服务器名称怎么修改
    腾讯云服务器名称的修改有几种方式,具体需要根据实际情况进行选择。 在腾讯云服务器官网上,点击右上角的“客户端管理”链接即可进入客户端管理页面。 在客户端管理页面上,点击“服务器信息”链接即可进入服务器信息页面。 在服务器信息页面上,点击...
    99+
    2023-10-26
    腾讯 名称 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作