C# 使用LINQ检查数据库中是否存在表
我们有一个已部署到各种客户端的数据库。我们目前正在引入一个可选的新功能,要使用该功能,将要求希望该功能的客户将新表添加到现有数据库中 当我们推出一款新的软件时,它必须与数据库的版本进行交互,无论有没有新表,我们都不需要两个版本,一个是给有新表的客户的,一个是给没有新表的客户的,我们想知道是否有可能通过entity framework以编程方式确定是否有一个表存在于数据库中,我可以尝试访问该表并让它抛出异常,但我想知道是否有内置函数来执行此操作 谢谢 编辑:如果有人告诉我应该使用配置文件,而不是使用EF检查配置文件,那么有人能给我一些关于如何使用mvc控制器的自定义数据注释检查配置文件的指导吗。比如:C# 使用LINQ检查数据库中是否存在表,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我们有一个已部署到各种客户端的数据库。我们目前正在引入一个可选的新功能,要使用该功能,将要求希望该功能的客户将新表添加到现有数据库中 当我们推出一款新的软件时,它必须与数据库的版本进行交互,无论有没有新表,我们都不需要两个版本,一个是给有新表的客户的,一个是给没有新表的客户的,我们想知道是否有可能通过entity framework以编程方式确定是否有一个表存在于数据库中,我可以尝试访问该表并让它抛出异常,但我想知道是否有内置函数来执行此操作 谢谢 编辑:如果有人告诉我应该使用配置文件,而不是使
[Boolean(Properties.Settings.Default.TableExists)]
public class NamedController : Controller
如果为false,则哪个页面会抛出未找到的页面
编辑2:根据人们提出的使用配置设置的建议,我最终得到了以下解决方案
应用程序设置以设置表是否存在
<appSettings>
<add key="tableExists" value="True"/>
</appSettings>
海关授权的代码
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,而是使用配置设置 查询表并获取异常 使用本机SQL查询系统视图并查找该表-在EFv4中,可以通过调用ExecuteStoreQuery直接从ObjectContext执行查询。 您的实体模型仍然会有这个表,所以在我看来,您应该简单地将您的数据库与该表一起发送,并在应用程序代码句柄中发送,若该特性被允许或不允许,那个么该表将不会被使用,但将在数据库中
如果您想制作模块化系统,那么当客户端不想使用时,包括应用程序代码在内的所有功能都不应该出现。更好的选择是将版本差异存储为配置。这可以存储在数据库本身、配置文件甚至web.config中 否则,您将得到混乱的代码,如:
int result = entity.ExecuteStoreQuery<int>(@"
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TableName')
SELECT 1
ELSE
SELECT 0
").SingleOrDefault();
可能的重复我不会为此使用LINQ。当然,你可以映射数据库模式元数据,我不会。@K Ivanov不是一个真正的副本,我在问是否可以用Entity framework完成,我已经知道如何用SQLIf完成。如果我把它是否存在于配置文件中,我是否正常添加EF,如果表不存在就忽略它?
int result = entity.ExecuteStoreQuery<int>(@"
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TableName')
SELECT 1
ELSE
SELECT 0
").SingleOrDefault();