运用.net三层思想(models层,DAL层,BLL层) 怎么处理数据库中的一个动态表?

时间:2022-04-17 13:19:15
----1。数据库中的一个动态表:举例: A表中的字段是通过B表的记录增加而来的
----2。(models层,DAL层,BLL层): 其实就是一个简单的三层结构 --- 相当于动软里面的自动生成的
简单的三层结构



---我有两点想法:
   1。 请高手们指点一下:我上面的想法是不是可行;
   2。 是否有其他的更好的想法;



谢谢啦!很急。。。。

34 个解决方案

#1


1可行
2正常就是这个做法啊!

#2


说的简单明了呀!
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!

#3


net3.5 linq的select 生成一个匿名对象列表
TypeDescriptor
http://msdn.microsoft.com/en-us/magazine/cc163816.aspx

#4


引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。

#5


引用 4 楼 raymond123456 的回复:
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。


你都知道动软了,就直接用动软生成,或者根据需求自己写啊

#6


不可行,关键是你如何生成动态的models呀,楼主,还是另想办法吧

#7


引用 5 楼 sy_binbin 的回复:
引用 4 楼 raymond123456 的回复:
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。


你都知道动软了,就直接用动软生成,或者根据需求自己写啊


正如楼上说的  这个动态的类怎么生成呢  还有数据访问类又如何生成?

#8


自己顶起来

#9


楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些


#10


其实根本不需要建A表,正如你所说的,B表直接关系着A表的字段,把这些字段看作一个记录集即可。
关键是要创建一个动态类:
这里有原来做的一个动态类的示例,供参考 http://blog.csdn.net/Rock870210/archive/2010/01/30/5273518.aspx

#11


数据访问类你可以自己写,也可以用东软自动生成的,也可以用微软的SQLHELP.CS

至于你说的动态类,我不明白是啥意思

#12


引用 9 楼 phil999 的回复:
楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些


大哥有没有上面实例可以参照的。

#13


引用 11 楼 sy_binbin 的回复:
数据访问类你可以自己写,也可以用东软自动生成的,也可以用微软的SQLHELP.CS

至于你说的动态类,我不明白是啥意思


就是models层

#14


引用 9 楼 phil999 的回复:
楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些

支持啊,要得到A表中的字段可以用DataTable

#15


A表中的字段是通过B表的记录增加而来的

你觉着他像啥?是狼来了,还是事件,还是触发器?

话说回来,人都不知道该怎么办的事情,你凭啥要求机器知道怎么办?难道lz穿越了,人类不在是世界的主宰,机器决定一切

#16


model层也可以用东软生成的啊!!
一个表对应一个model.cs

#17


引用 15 楼 wanghui0380 的回复:
A表中的字段是通过B表的记录增加而来的

你觉着他像啥?是狼来了,还是事件,还是触发器?

话说回来,人都不知道该怎么办的事情,你凭啥要求机器知道怎么办?难道lz穿越了,人类不在是世界的主宰,机器决定一切


我用的触发器

#18


引用 16 楼 sy_binbin 的回复:
model层也可以用东软生成的啊!!
一个表对应一个model.cs

大哥。。。 关键是这个实体类是动态 我又如何以静态方法表示出来呢?

#19


你先说明白了,什么样的实体类是动态的,什么样的是静态的

#20


引用 19 楼 sy_binbin 的回复:
你先说明白了,什么样的实体类是动态的,什么样的是静态的


B表的字段是静态的,A表的字段是动态的 是通过B表增加记录来增加A表的字段,我说的还不明了吗?
----B表映射到model层的类可以生成的  但是A表又如何生成呢?  

#21


很难,c#是静态编译型的,只有确定的class在是已知的东西

如果是动态的,c#4.0 到是可以做到一部分的动态,但是限制还是太大

现在已知的类似这种工具是,微软自己的sharepoint sever

sharepoint sever是根据表单中附带的xsd,动态的调用一个exe去生成相关的cs文件,然后实时的嵌入到系统,不过相对来说sharepoint sever也是普通程序员尽量避免的一个解决方案(也许我接触的层面太低级把,就我个人所接触的做sharepoint sever的人员,没有一个人说他是好用的解决方案)

个人决定,类似这种系统,使用ironpython和配置描述文件比较适合,ironPython是解释的东西,如果说让ironPython去解释配置文件,然后动态生成一些代理的cs,我觉得估计比较容易操控

#22


引用 20 楼 raymond123456 的回复:
引用 19 楼 sy_binbin 的回复:
你先说明白了,什么样的实体类是动态的,什么样的是静态的


B表的字段是静态的,A表的字段是动态的 是通过B表增加记录来增加A表的字段,我说的还不明了吗?
----B表映射到model层的类可以生成的 但是A表又如何生成呢?


你A表的字段不确定,那么MODEL层的代码也不确定,再说项目生成DLL后,也不可能动态的去修改DLL文件吧!所以这个需求在MODEL层就不好实现了,生成A表的操作可放在DAL里去实现。

#23


C#(57877619)技术讨论群,该群主要讨论ASP.Net,C#,JS,F#,Ajax. 期待你的加入......

#24


你这是对一个动态表的操作,三层已经够了!

#25


model是个问题

#26


动态的表  感觉还是别用三层了   可以在数据库建立一个自己的system表 来保持新创建表的信息,包括表中各个字段的信息,甚至可以同个这个来进行授权用户的可操作字段

#27


引用 26 楼 heavilyarmed 的回复:
动态的表  感觉还是别用三层了   可以在数据库建立一个自己的system表 来保持新创建表的信息,包括表中各个字段的信息,甚至可以同个这个来进行授权用户的可操作字段


+1  呵呵 都是我

做hr的时候就是这个思路

#28


那该如何解决这个问题呢?

#29


一个项目做到这里卡住了,真不知道怎么个思路啊?

#30


运用.net三层思想(models层,DAL层,BLL层) 怎么处理数据库中的一个动态表?

#31


今天再来顶一下,望高手指点迷津。。。

#32


谁做过这样的?其中A表的字段是通过增加B表记录产生的,其中用了触发器,。。。
 

#33


楼主的意思是在运行时动态生成一个A表实体类,和一个A表的访问层类。
1、对于访问层类,个人觉得是根据泛型,反射和特性编程写一个通用的访问层,这个访问层类是一个泛型类,期间的方法也是基于泛型的,外部只要提供一个实体的类型进来,那么编译器自动会将这个类及其其中的方法编译为当前传进来的类型的访问层类。
2、对于A表实体类,根据触发器在系统中也同时触发一个根据数据表名自动生成该数据表的实体类的函数CreateCsByTableName(TableName),这个函数的作用是:首先通过当前表名导数据库中获取表名和所有列名、列的类型、是否可空等信息,然后在这个函数中进行字符串组装,组装成一个实体类的字符串,然后将这个实体类字符串保存为.cs格式的文件,并在文件夹Model下,但是问题是,在运行的时候model是一个dll的组件了,不知道能不能将这个新的.cs文件是否能嵌入到里面去,这只是个想法。如有错误之处属个人才疏学浅问题。呵呵

#34


引用 33 楼 bin_520_yan 的回复:
楼主的意思是在运行时动态生成一个A表实体类,和一个A表的访问层类。
1、对于访问层类,个人觉得是根据泛型,反射和特性编程写一个通用的访问层,这个访问层类是一个泛型类,期间的方法也是基于泛型的,外部只要提供一个实体的类型进来,那么编译器自动会将这个类及其其中的方法编译为当前传进来的类型的访问层类。
2、对于A表实体类,根据触发器在系统中也同时触发一个根据数据表名自动生成该数据表的实体类的函数Cr……


谢谢你的思路,至于在系统发布后生成一个新的dll再加入到系统中 我暂时还不知道可不可行。

#1


1可行
2正常就是这个做法啊!

#2


说的简单明了呀!
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!

#3


net3.5 linq的select 生成一个匿名对象列表
TypeDescriptor
http://msdn.microsoft.com/en-us/magazine/cc163816.aspx

#4


引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。

#5


引用 4 楼 raymond123456 的回复:
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。


你都知道动软了,就直接用动软生成,或者根据需求自己写啊

#6


不可行,关键是你如何生成动态的models呀,楼主,还是另想办法吧

#7


引用 5 楼 sy_binbin 的回复:
引用 4 楼 raymond123456 的回复:
引用 1 楼 sy_binbin 的回复:
1可行
2正常就是这个做法啊!


关键是如何生成一个动态类和DAL类。。。


你都知道动软了,就直接用动软生成,或者根据需求自己写啊


正如楼上说的  这个动态的类怎么生成呢  还有数据访问类又如何生成?

#8


自己顶起来

#9


楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些


#10


其实根本不需要建A表,正如你所说的,B表直接关系着A表的字段,把这些字段看作一个记录集即可。
关键是要创建一个动态类:
这里有原来做的一个动态类的示例,供参考 http://blog.csdn.net/Rock870210/archive/2010/01/30/5273518.aspx

#11


数据访问类你可以自己写,也可以用东软自动生成的,也可以用微软的SQLHELP.CS

至于你说的动态类,我不明白是啥意思

#12


引用 9 楼 phil999 的回复:
楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些


大哥有没有上面实例可以参照的。

#13


引用 11 楼 sy_binbin 的回复:
数据访问类你可以自己写,也可以用东软自动生成的,也可以用微软的SQLHELP.CS

至于你说的动态类,我不明白是啥意思


就是models层

#14


引用 9 楼 phil999 的回复:
楼主这种想法比较不合理

可以在向 B 表增加记录的时候为 A 表添加字段
生成一个动态类和DAL类,参考msdn中关于“发出动态方法和程序集”的章节,但是用松散类型的 DataTable + CommandBuilder + DataAdapter 似乎更容易一些

支持啊,要得到A表中的字段可以用DataTable

#15


A表中的字段是通过B表的记录增加而来的

你觉着他像啥?是狼来了,还是事件,还是触发器?

话说回来,人都不知道该怎么办的事情,你凭啥要求机器知道怎么办?难道lz穿越了,人类不在是世界的主宰,机器决定一切

#16


model层也可以用东软生成的啊!!
一个表对应一个model.cs

#17


引用 15 楼 wanghui0380 的回复:
A表中的字段是通过B表的记录增加而来的

你觉着他像啥?是狼来了,还是事件,还是触发器?

话说回来,人都不知道该怎么办的事情,你凭啥要求机器知道怎么办?难道lz穿越了,人类不在是世界的主宰,机器决定一切


我用的触发器

#18


引用 16 楼 sy_binbin 的回复:
model层也可以用东软生成的啊!!
一个表对应一个model.cs

大哥。。。 关键是这个实体类是动态 我又如何以静态方法表示出来呢?

#19


你先说明白了,什么样的实体类是动态的,什么样的是静态的

#20


引用 19 楼 sy_binbin 的回复:
你先说明白了,什么样的实体类是动态的,什么样的是静态的


B表的字段是静态的,A表的字段是动态的 是通过B表增加记录来增加A表的字段,我说的还不明了吗?
----B表映射到model层的类可以生成的  但是A表又如何生成呢?  

#21


很难,c#是静态编译型的,只有确定的class在是已知的东西

如果是动态的,c#4.0 到是可以做到一部分的动态,但是限制还是太大

现在已知的类似这种工具是,微软自己的sharepoint sever

sharepoint sever是根据表单中附带的xsd,动态的调用一个exe去生成相关的cs文件,然后实时的嵌入到系统,不过相对来说sharepoint sever也是普通程序员尽量避免的一个解决方案(也许我接触的层面太低级把,就我个人所接触的做sharepoint sever的人员,没有一个人说他是好用的解决方案)

个人决定,类似这种系统,使用ironpython和配置描述文件比较适合,ironPython是解释的东西,如果说让ironPython去解释配置文件,然后动态生成一些代理的cs,我觉得估计比较容易操控

#22


引用 20 楼 raymond123456 的回复:
引用 19 楼 sy_binbin 的回复:
你先说明白了,什么样的实体类是动态的,什么样的是静态的


B表的字段是静态的,A表的字段是动态的 是通过B表增加记录来增加A表的字段,我说的还不明了吗?
----B表映射到model层的类可以生成的 但是A表又如何生成呢?


你A表的字段不确定,那么MODEL层的代码也不确定,再说项目生成DLL后,也不可能动态的去修改DLL文件吧!所以这个需求在MODEL层就不好实现了,生成A表的操作可放在DAL里去实现。

#23


C#(57877619)技术讨论群,该群主要讨论ASP.Net,C#,JS,F#,Ajax. 期待你的加入......

#24


你这是对一个动态表的操作,三层已经够了!

#25


model是个问题

#26


动态的表  感觉还是别用三层了   可以在数据库建立一个自己的system表 来保持新创建表的信息,包括表中各个字段的信息,甚至可以同个这个来进行授权用户的可操作字段

#27


引用 26 楼 heavilyarmed 的回复:
动态的表  感觉还是别用三层了   可以在数据库建立一个自己的system表 来保持新创建表的信息,包括表中各个字段的信息,甚至可以同个这个来进行授权用户的可操作字段


+1  呵呵 都是我

做hr的时候就是这个思路

#28


那该如何解决这个问题呢?

#29


一个项目做到这里卡住了,真不知道怎么个思路啊?

#30


运用.net三层思想(models层,DAL层,BLL层) 怎么处理数据库中的一个动态表?

#31


今天再来顶一下,望高手指点迷津。。。

#32


谁做过这样的?其中A表的字段是通过增加B表记录产生的,其中用了触发器,。。。
 

#33


楼主的意思是在运行时动态生成一个A表实体类,和一个A表的访问层类。
1、对于访问层类,个人觉得是根据泛型,反射和特性编程写一个通用的访问层,这个访问层类是一个泛型类,期间的方法也是基于泛型的,外部只要提供一个实体的类型进来,那么编译器自动会将这个类及其其中的方法编译为当前传进来的类型的访问层类。
2、对于A表实体类,根据触发器在系统中也同时触发一个根据数据表名自动生成该数据表的实体类的函数CreateCsByTableName(TableName),这个函数的作用是:首先通过当前表名导数据库中获取表名和所有列名、列的类型、是否可空等信息,然后在这个函数中进行字符串组装,组装成一个实体类的字符串,然后将这个实体类字符串保存为.cs格式的文件,并在文件夹Model下,但是问题是,在运行的时候model是一个dll的组件了,不知道能不能将这个新的.cs文件是否能嵌入到里面去,这只是个想法。如有错误之处属个人才疏学浅问题。呵呵

#34


引用 33 楼 bin_520_yan 的回复:
楼主的意思是在运行时动态生成一个A表实体类,和一个A表的访问层类。
1、对于访问层类,个人觉得是根据泛型,反射和特性编程写一个通用的访问层,这个访问层类是一个泛型类,期间的方法也是基于泛型的,外部只要提供一个实体的类型进来,那么编译器自动会将这个类及其其中的方法编译为当前传进来的类型的访问层类。
2、对于A表实体类,根据触发器在系统中也同时触发一个根据数据表名自动生成该数据表的实体类的函数Cr……


谢谢你的思路,至于在系统发布后生成一个新的dll再加入到系统中 我暂时还不知道可不可行。