Asp.net mvc MVC4 Linq数据库调用
正在开发我的第一个Asp.net mvc MVC4 Linq数据库调用,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,正在开发我的第一个MVCapp。我正在使用MVC4附带的简单成员数据库来管理用户和角色。我的理解是,我必须为下面的Find()调用执行三个步骤:获取登录人员的简单成员身份GUID,使用简单成员身份GUID获取我的信使数据库中的ID,然后将该ID用作Find()中缺少的参数在下面调用以返回要在视图中编辑的模型/记录如何/使用什么作为.Find()调用的参数?我是走对了路,还是让事情变得更复杂了 ps-创建Courier记录时,我将会员身份GUID保存在Courier数据库中Courier ID主键
MVC
app。我正在使用MVC4附带的简单成员数据库来管理用户和角色。我的理解是,我必须为下面的Find()
调用执行三个步骤:获取登录人员的简单成员身份GUID
,使用简单成员身份GUID
获取我的信使数据库中的ID,然后将该ID用作Find()中缺少的参数
在下面调用以返回要在视图中编辑的模型/记录如何/使用什么作为.Find()调用的参数?我是走对了路,还是让事情变得更复杂了 ps-创建Courier记录时,我将会员身份
GUID
保存在Courier数据库中Courier ID主键列之外的单独列中。多谢各位
public ActionResult EditCourier()
{
System.Web.Security.MembershipUser user = Membership.GetUser();
var providerUserKey = user.ProviderUserKey;
Guid userId = (Guid)providerUserKey;
String userIDstring = userId.ToString();
var model =
from c in db.Couriers
where c.CourierMembershipID == userIDstring
select c.ID;
Courier courier = db.Couriers.Find();
if (courier == null)
{
return HttpNotFound();
}
return View(courier);
}
MSDN文档说明: 使用主键值尝试查找由 上下文如果实体不在上下文中,则将执行查询 针对数据源中的数据执行和计算,并且为空 如果在上下文或数据中找不到实体,则返回 来源 所以,如果您在Couriers表中将userId作为主键,那么您可以这样使用:
Courier courier = db.Couriers.Find(userId);
否则,应使用标准LINQ查询,然后调用.FirstOrDefault()
或SingleOrDefault()
方法:
Courier courier = db.Couriers.FirstOrDefault(c=>c.CourierMembershipID == userIDstring);
编辑:
我想您从下一个查询中得到此错误:
var model =
from c in db.Couriers
where c.CourierMembershipID == userIDstring
select c.ID;
原因是您从这个查询IEnumerable
模型中得到的。
要进行此查询以获取单个Courier
对象,请尝试在末尾调用.FirstOrDefault()
:
var model = (from c in db.Couriers
where c.CourierMembershipID == userIDstring
select c.ID).FirstOrDefault();
非常感谢。我把我的问题简化了一点。所以,请让我这样问。我正试图用linq查询返回一条记录到视图中,但是我收到了无法将ienumberable转换为Courier的错误消息非常感谢。首先是在这个问题上的巨大帮助。我也要试试第一道菜。