2013-02-28 123 views
1

我没有可见的领域,你知道为什么(在我的LINQ)?实体框架 - 选择数据

var student = (from s in ctx.Students 
       where s.StudentName == "Student1" 
       select s).FirstOrDefault<Student>(); 

数据库(表领土):

enter image description here

LINQ

enter image description here

LINQ与CTX也有问题

enter image description here

的TerritoryID

enter image description here

正确:

public ActionResult Index() 
     { 

      using (var ctx = new NORTHWNDEntities()) 
      { 

       var Territory = (from s in ctx.Territories 
           where s.TerritoryDescription 
             == "Student1" 
           select s).FirstOrDefault<Territories>(); 
      } 

      return View(); 
     } 

感谢所有为您的时间!和帮助。

+0

你的意思是你的代码正在编译,但你不能在设计中看到'Territory'?你尝试刷新edmx,或删除它并创建一个新的? – Habib 2013-02-28 12:13:24

+1

不应该从'在ctx.Territories'中? – MarcinJuraszek 2013-02-28 12:14:08

+0

你是否在视图中返回任何东西? – 2013-02-28 12:31:37

回答

2

ctx是不是当你创建一个环境图奇迹般地出现。要使用你的背景,你必须将它实例,像这样:

using(var ctx = new MyContext()) 
{ 
    var territory = .... 
} 

其中MyContext应该由你的上下文类的名称所取代。

+0

我必须添加,因为MyContext()或MyEntity()不可见。 – 2013-02-28 12:55:01

+0

嗯,我不知道你的上下文类的名字。看到我的补充。 – 2013-02-28 12:55:52

+0

public partial class NORTHWNDEntities:ObjectContext {} < - 我了解NORTHWNDEntities我必须把 – 2013-02-28 12:57:17

2

检查课程以查看该属性是否标记为私人。

+0

访问权限对此表是公开的。 – 2013-02-28 12:18:54

+0

我指的是TerritoryID本身,它可能被标记为私有,表格是公开的。 – 2013-02-28 12:24:56

+0

我edtited我的帖子可以看看吗? – 2013-02-28 12:30:59

3

它是否在您正在查询的上下文中显示ctx?
这个问题看起来像你没有创建好你的数据上下文的实例(ctx),或者可能是那个上下文中不可见的变量(ctx)。

+0

你知道我使用VS 2010创建.edmx,现在我想从使用LINQ的Territoy获取数据,但ctx不可见。 Resharper告诉我“创建局部变量ctx”我必须做什么? – 2013-02-28 12:34:39

+1

您可以创建本地变量,或者也可以在控制器级作用域声明一个私有变量,然后在控制器的构造器中初始化该变量。然后,变量将在您的所有操作中可见。 – 2013-02-28 13:46:52

2

建议立即进行删除不:

(from s in Territories where s.TerritoryID == "Student1" select s).FirstOrDefault<Territories>(); 
+0

不,红色在哪里。 – 2013-02-28 12:50:08