使用LINQ检查数据库中是否存在表
我们有一个已经部署到各种客户端的数据库。 我们目前正在推出一项可选的新功能,要使用这项功能,需要希望该功能的客户将新表添加到现有数据库中。
由于我们正在推出一款新软件,这些软件必须与带有和不带有新表格的数据库版本进行交互(并且我们不希望2版本用于拥有新表格的客户,不要)我们想知道是否有可能以编程方式确定(使用实体框架)数据库中是否存在表(我可以尝试访问表并让它抛出异常但想知道是否有内置函数去做这个)
谢谢
编辑:鉴于人们告诉我,我应该使用一个配置文件不检查EF任何人都可以给我指导如何检查配置文件,例如,为mvc控制器的自定义数据注释。 就像是:
[Boolean(Properties.Settings.Default.TableExists)]
public class NamedController : Controller
如果发现错误,哪个抛出页面?
编辑2:使用人们给出的建议来使用配置设置,我结束了以下解决方案
应用程序设置来设置表格是否存在
<appSettings>
<add key="tableExists" value="True"/>
</appSettings>
一个自定义数据注释来说明是否允许访问控制器
[AuthoriseIfTableExistsIsTrue]
public class NamedController : Controller
自定义授权的代码
public class AuthoriseIfTableExistsIsTrue : AuthorizeAttribute
{
private readonly bool _tableExists;
public AuthoriseIfTableExistsIsTrue()
{
_tableExists = string.Equals(bool.TrueString, ConfigurationManager.AppSettings["tableExists"], StringComparison.InvariantCultureIgnoreCase);
}
public AuthoriseIfTableExistsIsTrue(bool authorise)
{
_tableExists = authorise;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (_tableExists)
return base.AuthorizeCore(httpContext);
else
throw new HttpException(404, "HTTP/1.1 404 Not Found");
}
}
感谢大家的帮助,并告诉我不要用EF来做这个,而是使用配置设置
更好的选择是将版本差异存储为配置。 这可以存储在数据库本身,配置文件甚至web.config中。
否则,你会最终得到乱码:
int result = entity.ExecuteStoreQuery<int>(@"
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TableName')
SELECT 1
ELSE
SELECT 0
").SingleOrDefault();
唯一可能的方式是
ExecuteStoreQuery
直接从ObjectContext
执行查询。 你的实体模型仍然有这张表,所以我认为你应该简单地将你的数据库与该表一起发送,如果功能被允许或不允许(应用程序代码句柄不会被使用,但将在数据库中)在应用程序代码句柄中。
如果你想制作模块化系统,那么客户端不想使用它时,你的所有功能(包括应用程序代码)都不应该存在。
链接地址: http://www.djcxy.com/p/94451.html