我在我的应用程序中使用SQL Server管理对象。应用程序中SMO对象的大多数操作都是从UI直接触发的。例如。用户操纵对象导致从SMO对象读取或写入属性(表,视图,...)。
现在我想介绍一个后台操作,它会定期扫描一些对象(只读)。
我的问题是,这是否会导致SMO出现问题。从文档中我知道对象的实例成员不是线程安全的。所以我的计划是每当我从UI或后台线程访问它时,锁定每个单独的SMO对象。但是如果我同时访问两个不同的对象(例如View和Table)会发生什么。即使我只读取属性,对象也可能没有被完全初始化,需要从数据库加载。因此,在最坏的情况下,SMO需要同时对两个对象进行初始化。由于我不知道SMO如何在内部处理这个问题,我想知道是否有人知道SMO是否允许这样做或是否会导致问题。
关于如何解决这个问题的任何其他建议?我想避免对整个SMO库进行全局锁定......
谢谢!
答案 0 :(得分:0)
我使用SMO,我学到的是,如果你想进行一些常规的操作(脚本......)它是有用的。但是如果你想真正管理数据库对象,最好使用系统存储过程(所以SMO不会是另一层要理解的。)使用存储过程可以让你锁定数据,这将是一个可能的解决方案