我知道这个问题之前已被多次询问,因为我已经阅读了很多关于利弊等主题的帖子,但我仍然无法确定哪种方法适合我.我是网络编程的新手,来自SQL DB管理员/报告编写背景.我决定尝试建立自己的网站,最终可能会有更多的30 -40桌子.
我看了两种方法,我确实赞成实体模型方法,因为我喜欢设计师的简单性,我喜欢在我面前看到整个模型,它在一个快照中显示整体画面.另外,我不是一个强大的程序员,我对它使用DbContext生成器模板生成POCO的方式印象深刻,并完成了类之间的所有链接.
然而,虽然我喜欢模型第一种方法,但我觉得有一些缺点,我不确定它们是否是真正的缺点,或者我只是对模型第一种方法和代码第一种方法知之甚少,因为我仍然非常新的.
我对使用Model First方法犹豫不决的原因是:
- 主要是因为我很难找到使用MVC 3的模型第一种方法的教程.我发现使用DbContext的最好的教程是Julie Lerman,但她不涉及对使用数据注释和制作其他内容很重要的伙伴类重新生成POCO时未丢失的更改.大多数与MVC 3相关的教程似乎都使用Code第一种方法.大多数人都说这是因为导师不想专注于EF,而是在tuts中展示更多的MVC.我个人认为这是因为微软支持Code First方法而不是其他方法:)
- 如果创建好友类是一个好习惯,为什么我找不到很多教程来展示MVC 3呢?Buddy Classes是View Models的另一个名称吗?为什么我找不到微软展示这些与MVC 3一起使用的伙伴/视图模型的教程?
- 我试图在2个表之间建立基本的1对1关系.在模型中,您必须将每个表的标识键设置为相同的字段,而不是在其中一个表中使用FK,当您有3个或更多表通过1对1关系相互链接时,这可能会有点混乱.在代码中首先解决这个问题的方法是使用模型构建器并手动设置它.我认为在MF中你可以通过进入我根本不热衷的XML来改变关系.
- 更多支持/帮助解决代码问题
我对使用Code First方法犹豫不决的原因是:
- 我是新手编码员.
- 我发现随着项目的扩展,跟踪表格和关系变得非常困难.
- 没有模型图,我不得不说我真的喜欢这个想法.
- 通过配置类将实体映射到数据库我发现不可能:).
- 更新表将需要更改代码和数据库.在模型中,首先只对模型进行一次更改,该模型将自动更新数据库和代码,如果您使用好友类,则可能还需要更新这些类.
此外,我现在看到人们在某种程度上结合了Code First和Database的第一种方法,因为你不要让Code First生成你的数据库,而是手动创建一个数据库,并使用代码优先API到EF来实现它.
我的头脑旋转着所有的选择和缺点以及利弊.我只是想继续创建我的网站,而不是思考采取哪种方法.任何人都可以根据我所说的和/或他们认为未来更主流的方式,给我一些洞察他们认为最好的方法吗?
非常感谢戴夫
.net ef-code-first entity-framework-4.1 asp.net-mvc-3 ef-model-first
我放弃.我发现了这个:http: //blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx 并且认为,这很酷.所以我很快重新设计了我的模型,以充分利用两个世界中最好的一个.
但是现在我的模型无法创建新数据库(或者向现有数据库添加tabls).我收到此错误:
如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作.要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串.要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码.
在:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
Run Code Online (Sandbox Code Playgroud)
那是我的连接字符串:
<add name="ForumContextContainer"
providerName="System.Data.SqlClient"
connectionString="Data Source=.\SQLExpress; Initial Catalog=iForum; Integrated Security=True"/>
Run Code Online (Sandbox Code Playgroud)
注意.我稍后添加了初始目录,试试它是否会起作用,但它完全一样.
.net entity-framework ef-code-first entity-framework-4.1 ef-model-first
所以我正在学习MVC3和EF4.我尝试了第一个代码方法,但它对我来说太混乱了.我可以创建类没有问题,但是在处理外键和彼此之间的关系时会遇到困难.
但我先把模特带走了.通过这种方式,我可以直观地设计它并查看关系的位置.
在我的模型创建之后,它为我创建了一个SQL,我对我的SQL Express数据库执行该操作.做完了.
现在我想要表格中的数据.当然我可以使用服务器资源管理器添加它们,但很可能我会在进行时对模型进行更改.并不断更新数据库.所以我无法手动输入数据.我知道如果您首先使用代码,您可以派生DropCreateDatabaseIfModelChanges并覆盖该seed方法.
但是,如何使用模型第一种方法?我有以下代码:
public class DatabaseInitializer : IDatabaseInitializer<BettingContext> {
public void InitializeDatabase(BettingContext context) {
var teams = new List<Team> {
new Team { Name="Toronto Maple Leafs", League="NHL"},
new Team { Name="Boston Bruins", League="NHL"},
new Team { Name="Vancouver Canucks", League="NHL"},
new Team { Name="Nashville Predators", League="NHL"},
new Team { Name="Montreal Canadiens", League="NHL"},
};
}
}
Run Code Online (Sandbox Code Playgroud)
当然,在我的全局文件中:
protected void Application_Start()
{
Database.SetInitializer<BettingContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
那么现在怎么办?如何告诉它运行该方法?我究竟做错了什么?
我有一个现有的模型,最初从这个模型生成数据库,并用一些数据填充现有的表.现在我已经为模型添加了一个新表.有没有办法从新模型更新数据库而不会丢失现有表中的所有数据?谢谢.
代码首次迁移对我来说非常有效.我有一个服务项目和一个wpf项目.该模型位于服务项目中,由wpf项目引用.Update-database在服务项目上完成,但使用来自wpf项目的连接字符串.我现在添加一个也引用服务项目的Web项目.现在app.config中有一个连接字符串,web.config中有一个连接字符串,它将使用哪一个?
entity-framework connection-string code-first ef-migrations ef-model-first
我已经设置了一个系统,我采用了模型第一种方法,因为它对我来说更具逻辑意义.现在,即使我在模型中有一些变化,我现在所做的是 -
问题:主要问题是真的很乏味,因为我是从本地系统进行的,连接到我的prod数据库非常慢,有时我的视觉工作室也会崩溃.有没有更清洁的方法来做到这一点?哪个更自动化,以至于我的笔记本电脑对生产实例上的数据库迁移不负实际责任?
database automation entity-framework-4.1 ef-migrations ef-model-first
首先在Entity Framework 5模型中,由于生成类文件的方式,似乎存在一些重大更改(不再生成代码,但是T4模板)
2个例子:
是否有更多的突破性变化?他们的解决方案是什么?
期望的结果:
使用模型优先方法与实体框架,并允许根据模型中的更改自动完成对已部署的数据库/模型的更改.生成自动模式差异脚本以允许平滑迁移.
有没有办法在模型第一EF6中执行迁移?我可以看到代码首次迁移主题,但在Model First上没什么.
我到目前为止看到的选项:
我有问题,我刚开始学习EF Model First并且我在一段时间内待在一个点上.我有这样的错误:
"更新条目时发生错误.有关详细信息,请参阅内部异常"
我在图上创建了一个简单的模型,生成了数据库并在C#中编写了简单的代码,只在表中添加了一行,但错误一直出现.
我发布了截图与图/生成的DLL /简单主/错误抛出

更大尺寸的链接:http://i.imgur.com/bKGc4wv.png
首先使用代码时,EF迁移实用程序似乎相当不错.
根据这篇博客文章,我尝试在我们使用模型优先的项目中进行设置.运行Enable-Migrations命令时,我收到以下错误:
不支持从使用Database First或Model First创建的DbContext创建DbModelBuilder或编写EDMX.EDMX只能从不使用现有DbCompiledModel创建的Code First DbContext中获取.
有没有办法解决它,所以我们可以使用EF迁移而无需切换到代码优先?