代码改变世界

Linq To SQL 下实现动态表名的映射

2009-02-07 11:53 麦舒 阅读(...) 评论(...) 编辑 收藏

这段时间代码写累了,写几篇文章舒缓一下,也算是劳逸结合吧。如果觉得我的文章对你有用,请给点掌声,谢谢。

提出问题

前段时间,在博客园里看到有位朋友,问如何实现在动态表名。我们都知道,把一个实体类映谢到表里,应该这样写:

 

Code
    [Table(Name = "User")]
    
class User
    {
        [Column]
        
public int ID;

        [Column]
        
public string Name;

    }

 

很明显,这里的表名是写死的,有些时候,我们可能要根据不同的情况实现不同的表名里加个前缀或者后缀,例如:

tt_User,aa_User,User1、User2。

分析问题

要解决这个问题,首先我们就要明白一个问题,DataContext是如何将实体到表的映射的,事实上,它是例用MappingSource提供的信息来进行映射的。要解决上面的问题,我就是需要重新构一个继承于MappingSource的类。

解决问题

代码如下:

 

Code

 

把运行后的结果给大家看一下:

从上图可以看到,表名已经由原来的User分别变为了User1和User2。