gpt4 book ai didi

c# - Entity Framework 4 到 6 的解决方法

转载 作者:行者123 更新时间:2023-11-30 22:06:18 25 4
gpt4 key购买 nike

我正在尝试通过本教程学习 Entity Framework 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”的定义,并且找不到接受“System.Data.Entity.DbSet”类型的第一个参数的扩展方法“AddObject”(是你缺少 using 指令或程序集引用?)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”的定义,并且找不到接受“ContosoUniversity.SchoolEntities”类型的第一个参数的扩展方法“DeleteObject”(您是否缺少 using 指令或程序集引用?) C:\Users\Karl\documents\visual studio 2013\Projects\ContosoUniversity\ContosoUniversity\Instructors.aspx.cs 56 37 ContosoUniversity

可能的解决方法是什么?

最佳答案

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)

对于发现自己在此处查看相同问题的任何人,Contoso 大学示例在 VisStudio2012(或更确切地说 EF5)中不起作用的原因围绕着这样一个事实,即在 EF4 中创建的数据库上下文是一个 ObjectContext,在 EF5 中是您的被创建为较新的 DBContext。因此,本教程中提到的优化部分将不起作用,您将收到有关无法转换为 ObjectContext 的错误(请参阅上面的链接来解决此问题,您基本上用创建上下文的事件调用替换了这部分).

我遇到的第二个问题是在第 4 部分中,您通过代码更新了 GridView 行(以显示办公室分配)。原因还是一样的,旧的 ObjectContext(当您查看创建的 SchoolModel.Entities.cs 时)使用 ObjectSet<> 来表示表对象。 DBContext 将它们创建为 DBset<> 并且每种类型中的方法都不同。

用 Add() 代替 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.
}
}
}

关于c# - Entity Framework 4 到 6 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com