2016-08-22 3 views
1

Я получаю эту ошибку, когда я запускаю мой сервер:ASP .NET Entity: EntityCommandExecutionException

An exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll but was not handled in user code Additional information: An error occurred while executing the command definition. See the inner exception for details.

Вот мой ActionResult, где происходит это исключение, в строке в цикле Еогеаспа. Таблица ставки из базы данных имеет ограничение внешнего ключа для таблицы 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); 
} 

Вот подробная ошибка:enter image description here

Я действительно путают, первый раз, видя это исключение, надеюсь, кто-то поможет мне решить это.

Заранее благодарен!

+0

Вы ничего не делаете с 'var users = from b in db.AspNetUsers выберите b; 'Попробуйте загрузить информацию пользователя в свой запрос' var bids'. т.е. что-то вроде 'from b в db.bids.Include ('AspNetUser')' – DWright

+0

Не упоминал, что странно, что я уже закончил кодирование одного приложения с точно таким же кодом, а теперь на этом другом я получаю исключение в предыдущем, одно исключение. – luka032

ответ

0

Возможно ли, что одна из записей в переменной bid не имеет указанного значения идентификатора AspNetUser, поэтому отношение равно null? Другим обходным решением является то, что у меня иногда возникают такие странные ошибки, что, хотя идентификатор указан, ошибка по-прежнему сохраняется. Так как вы загрузили все соответствующие пользовательские данные в переменных пользователь, вы можете изменить линию от:

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

Для

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

i.AspNetUserID является в AspNetUser в поле идентификатора (Я надеваю не знаю, как это называется, поэтому замените i.AspNetUserID с правильным значением) в поле AspNetUserID таблицы ставок (опять же, замените правильное имя).

Если это не удается, найденный пользователь имеет значение NULL, есть проблема, которая должна быть определена; пользователь не связан и не возвращается, и для этого вам нужно определить конкретную запись в переменной ставки, которая не связана правильно ...

+0

Я только что попробовал, и я получаю ту же ошибку исключения. Кстати, невозможно иметь нулевую ссылку на таблицу AspNetUser, потому что AspNetUser создает объект Bid и помещает себя в поле Id. – luka032

+0

Как AspNetUser создает объект Bid? В хранимой процедуре или триггере? –

+0

На стороне клиента путем нажатия кнопки, зарегистрированный пользователь создает ставку, поэтому процедура. – luka032

Смежные вопросы