我正在使用EF 4.1并使用DB第一种方法.我也创建了我的.edmx文件.现在我想创建我的POCO课程.
为此,我已经从NuGet安装了EF 4.x DbContext Generator以及EF 4.x POCO实体生成器.
我完全知道建议使用DbContext for EF 4.1+,因为它是从ObjectContext派生的.但是,我仍然使用EF 4.x POCO实体生成器,然后通过EF 4.x DbContext Generator生成我的POCO类.
编辑:发现这个ADO.NET DbContext生成器与ADO.NET Poco实体生成器(ObjectContext)
在任何一种情况下,它都会生成.Context.tt和Model.tt文件.那么这两种工具生成的文件的确切区别是什么?为什么建议在EF 4.1+上使用DbContext?
我还想知道ObjectContext的局限性.
我们有一个已部署到各种客户端的数据库.我们目前正在引入一个可选的新功能,该功能将要求希望该功能的客户将新表添加到现有数据库中.
正在我们推出一款新软件,无论是否有新表,都必须与数据库版本进行交互(因为我们不希望有2个版本用于拥有新表的客户和一个用于不是)我们想知道是否有可能以编程方式确定(使用实体框架)数据库中是否存在表(我可以尝试访问该表并让它抛出异常但是想知道是否有内置函数去做这个)
谢谢
编辑:鉴于人们告诉我我应该使用配置文件不检查EF,任何人都可以指导我如何检查配置文件,例如,mvc控制器的自定义数据注释.就像是:
[Boolean(Properties.Settings.Default.TableExists)]
public class NamedController : Controller
Run Code Online (Sandbox Code Playgroud)
如果错误,会抛出未找到的页面?
编辑2:根据人们给出的建议使用配置设置,我最终得到了以下解决方案
用于设置表是否存在的应用程序设置
<appSettings>
<add key="tableExists" value="True"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
自定义数据注释,以说明是否允许访问控制器
[AuthoriseIfTableExistsIsTrue]
public class NamedController : Controller
Run Code Online (Sandbox Code Playgroud)
自定义授权的代码
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");
}
}
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助,并告诉我不要使用EF,而是使用配置设置