从实体框架4到6的变通方法
本文关键字:方法 实体 框架 | 更新日期: 2023-09-27 18:04:03
我正在尝试学习实体框架与本教程开始与实体框架
但我有麻烦,因为教程是使用实体框架4,而我的visual studio自动使用实体框架6。我也尝试安装实体框架4。但是实体数据模型向导不让我选择是使用框架6还是框架4
下面是不能工作的代码。
context.OfficeAssignments.AddObject(OfficeAssignment.CreateOfficeAssignment(instructorBeingUpdated, instructorOfficeTextBox.Text, null));
context.DeleteObject(officeAssignment);
var allCourses = context.GetCourses().ToList();
错误1 'System.Data.Entity. 'DbSet'没有包含'AddObject'的定义,也没有扩展方法'AddObject'接受类型为'System.Data.Entity '的第一个参数。可以找到DbSet'(您是否缺少using指令或程序集引用?)c:' users ' carl 'documents'visual studio 2013'Projects'ContosoUniversity'ContosoUniversity'Instructors.aspx.cs 44 55 contosouniuniversity
错误2 ' contouniversity。C:'Users'Karl'documents'visual studio 2013'Projects'ContosoUniversity'ContosoUniversity'Instructors.aspx.cs 44 82 contosouniuniversity
错误3 ' contouniversity。SchoolEntities'不包含'DeleteObject'的定义,也没有扩展方法'DeleteObject'接受类型为' contosoununiversity '的第一个参数。可以找到SchoolEntities(您是否缺少using指令或汇编参考?)c:' users ' carl 'documents'visual studio 2013'Projects'ContosoUniversity'ContosoUniversity'Instructors.aspx.cs 56 37 contosouniuniversity
可能的变通方法是什么?
http://forums.asp.net/t/1876088.aspx
谢谢这些链接伙计们。在这里的文章和你提供的链接之间,我能够阅读更多,并弄清楚发生了什么。
根本原因是EntityFramework 4和5之间的差异。这实际上是在文章的开头指出的,但直到我读了更多的书,然后回到它,我不明白他们在解释什么。
(解释:http://blogs.msdn.com/b/webdev/archive/2012/09/13/how-to-use-the-entitydatasource-control-with-entity-framework-code-first.aspx)
对于任何发现自己在这里看同样问题的人来说,康托索大学的例子在VisStudio2012(或者更确切地说是EF5)中不起作用的原因是围绕这样一个事实,即在EF4中创建的数据库上下文是一个ObjectContext,在EF5中,您的数据库上下文被创建为一个更新的DBContext。因此,在教程中提到的优化部分将不起作用,你会得到关于无法转换到ObjectContext的错误(见上面的链接来修复这个问题,你基本上用创建上下文的事件调用替换这部分)。
我遇到的第二个问题是在第4部分中,您通过代码更新GridView行(以显示办公室分配)。原因还是一样的,旧的ObjectContext(当您查看创建的SchoolModel.Entities.cs时)使用ObjectSet<>来表示表对象。DBContext将它们创建为DBset<>,并且每种类型中的方法是不同的。
Add()代替Addobject()用Remove()代替DeleteObject()使用....代替CreateOfficeAssignment()好吧,我不确定,所以我只是创建了一个实体,我不确定这是坏还是好。这是我修改后的代码,现在看起来可以工作了(原来的行被注释掉了):
protected void InstructorsGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
using (var context = new SchoolContext())
{
var instructorBeingUpdated = Convert.ToInt32(e.Keys[0]);
var officeAssignment = (from o in context.OfficeAssignments
where o.InstructorID == instructorBeingUpdated
select o).FirstOrDefault();
try
{
if (String.IsNullOrWhiteSpace(instructorOfficeTextBox.Text) == false)
{
if (officeAssignment == null)
{
//context.OfficeAssignments.AddObject(OfficeAssignment.CreateOfficeAssignment(instructorBeingUpdated, instructorOfficeTextBox.Text, null));
context.OfficeAssignments.Add(new OfficeAssignment { InstructorID = instructorBeingUpdated, Location = instructorOfficeTextBox.Text, Timestamp = null });
}
else
{
officeAssignment.Location = instructorOfficeTextBox.Text;
}
}
else
{
if (officeAssignment != null)
{
//context.DeleteObject(officeAssignment);
context.OfficeAssignments.Remove(officeAssignment);
}
}
context.SaveChanges();
}
catch (Exception)
{
e.Cancel = true;
ErrorMessageLabel.Visible = true;
ErrorMessageLabel.Text = "Update failed.";
//Add code to log the error.
}
}
}
应该可以工作(未测试…)
context.OfficeAssignments.Add(new OfficeAssignment(instructorBeingUpdated, instructorOfficeTextBox.Text, null));
context.officeAssignments.remove(officeAssignment);
var allCourses = context.Courses().ToList();