【问题标题】:ASP .NET Entity: EntityCommandExecutionExceptionASP .NET 实体:EntityCommandExecutionException
【发布时间】:2016-08-22 17:16:16
【问题描述】:

我在运行服务器时收到此错误:

类型异常 'System.Data.Entity.Core.EntityCommandExecutionException' 发生在 EntityFramework.SqlServer.dll 但未在用户代码中处理 附加信息:执行命令定义时出错。有关详细信息,请参阅内部异常。

这是我的 ActionResult 发生此异常的地方,位于 foreach 循环中的行。来自数据库的表投标对 AspNetUser 表有外键约束。

public ActionResult Details(long? id)
{
if (id == null)
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

auction auction = db.auctions.Find(id);

if (User.IsInRole("Administrator"))
    ViewBag.UserRole = "Administrator";
else if (User.IsInRole("User"))
    ViewBag.UserRole = "User";
else
    ViewBag.UserRole = "Guest";

var bids = from b in db.bids
            where b.IDAuc == id
            orderby b.tokens
            descending select b;

var bidsLimited = bids.Take(10);
var users = from b in db.AspNetUsers
            select b;

int count = bidsLimited.Count();
long[] prices = new long[count];
string[] bidders = new string[count];
string[] times = new string[count];
string[] states = new string[count];
int i = 0;

foreach (var bid in bidsLimited)
{
    prices[i] = bid.tokens;
    bidders[i] = bid.AspNetUser.Email; // HERE IS EXCEPTION
    times[i] = bid.created.ToString(@"dd\:hh\:mm\:ss");
    states[i++] = "Open";
}

if (auction.state == "Sold")
    states[0] = "Sold";

ViewBag.count = count;
ViewBag.prices = prices;
ViewBag.bidders = bidders;
ViewBag.times = times;
ViewBag.states = states;
ViewBag.IDAuction = id;

return View(auction);
}

这里有详细的错误:

我真的很困惑,第一次看到这个异常,希望有人能帮我解决这个问题。

提前致谢!

【问题讨论】:

  • 您没有对var users = from b in db.AspNetUsers select b; 做任何事情尝试在您的var bids 查询中急切加载用户信息。即类似from b in db.bids.Include('AspNetUser')
  • 没有提到有什么奇怪的,我已经用完全相同的代码完成了一个应用程序的编码,现在在另一个应用程序上,我在前一个相同的应用程序上遇到异常,没有异常。

标签: c# asp.net entity-framework


【解决方案1】:

bid 变量中的一条记录是否可能没有指定 AspNetUser ID 值,因此关系为空?另一个解决方法是我有时确实会遇到这样的奇怪错误,即使指定了 ID,错误仍然存​​在。由于您已将所有相关的用户数据加载到 users 变量中,因此您可以更改以下行:

bidders[i] = bid.AspNetUser.Email; // HERE IS EXCEPTION

到

bidders[i] = users.First(i => i.AspNetUserID == bid.AspNetUserID).Email;

i.AspNetUserID 是 AspNetUser 的 ID 字段(我不知道它叫什么,所以将 i.AspNetUserID 替换为正确的值)到出价表的 AspNetUserID 字段(再次,替换为正确的名称)。

如果失败,发现用户为NULL,说明某处有问题,需要判断;用户未链接并返回,为此您需要识别出价变量中未正确链接的特定记录...

【讨论】:

  • 我刚刚尝试过,我得到了同样的异常错误。顺便说一句,AspNetUser 表不可能有空引用,因为 AspNetUser 正在创建 Bid 对象,并将其自身放入 Id 字段。
  • AspNetUser 如何创建 Bid 对象?在存储过程或触发器中?
  • 在客户端通过按钮点击,登录用户正在创建投标,所以程序。
猜你喜欢
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
相关资源
最近更新 更多