我正在尝试使用本教程Getting Started with Entity Framework
学习实体框架但是我遇到了麻烦,因为教程正在使用Entity Framework 4,而我的visual studio自动使用Entity Framework 6.我还尝试安装Entity Framework 4。但实体数据模型向导不允许我选择是否使用Framework 6或Framework 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'的第一个参数可以找到(是你错过了使用指令或汇编引用?)C:\ Users \ Karl \ documents \ visual studio 2013 \ Projects \ ContosoUniversity \ ContosoUniversity \ Instructors.aspx.cs 44 55 ContosoUniversity
错误2'ContosoUniversity.OfficeAssignment'不包含'CreateOfficeAssignment'的定义C:\ Users \ Karl \ documents \ visual studio 2013 \ Projects \ ContosoUniversity \ ContosoUniversity \ Instructors.aspx.cs 44 82 ContosoUniversity
错误3'ContosoUniversity.SchoolEntities'不包含'DeleteObject'的定义,也没有扩展方法'DeleteObject'接受类型'ContosoUniversity.SchoolEntities'的第一个参数(你是否缺少using指令或程序集)参考?)C:\ Users \ Karl \ documents \ visual studio 2013 \ Projects \ ContosoUniversity \ ContosoUniversity \ Instructors.aspx.cs 56 37 ContosoUniversity
可能的解决方法是什么?
答案 0 :(得分:3)
http://forums.asp.net/t/1876088.aspx
感谢那些链接家伙。在这里的文章和你提供的链接之间,我能够阅读更多内容并弄清楚发生了什么。
根本原因是EntityFramework 4和5之间的差异。实际上在文章的开头就已经注意到了这一点,但是直到我做了更多的阅读然后再回到它,我才明白他们在哪里解释。< / p>
对于那些发现自己在同一个问题的人来说,Contoso大学示例在VisStudio2012(或更确切地说是EF5)中不起作用的原因围绕着这样一个事实,即在EF4中创建的数据库上下文是一个ObjectContext,在EF5中你的是作为较新的DBContext创建的。因此,本教程中提到的优化部分将无法工作,您将收到有关无法转换为ObjectContext的错误(请参阅上面的链接以解决此问题,您基本上用创建上下文的事件调用替换此部分)。
我遇到的第二个问题是在第4部分中,您通过代码更新GridView行(以显示办公室分配)。原因是同样的,旧的ObjectContext(当你查看创建的SchoolModel.Entities.cs时)使用了ObjectSet&lt;&gt;表示表对象。 DBContext将它们创建为DBset&lt;&gt;每种类型的方法都不同。
而不是Addobject()我们添加() 而不是DeleteObject()使用Remove() 而不是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.
}
}
}
答案 1 :(得分:0)
这应该有效(未经过测试..)
context.OfficeAssignments.Add(new OfficeAssignment(instructorBeingUpdated, instructorOfficeTextBox.Text, null));
context.officeAssignments.remove(officeAssignment);
var allCourses = context.Courses().ToList();