2016-08-22 17 views
1

私は自分のサーバーを実行したとき、私はこのエラーを取得しています:ASP .NETエンティティ: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.

はここでforeachループ内の行で、この例外が発生した私の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 = b from in db.AspNetUsersはb;を選択します。代わりに 'var bids'クエリでユーザ情報を読み込もうとします。例えば ​​'db from db.bids.Include( 'AspNetUser') 'のようなものです – DWright

+0

私はすでに同じコードで1つのアプリケーションをコーディングしてしまったことを奇妙なことは言及していませんでした。例外はありません。 – luka032

答えて

0

bid変数のレコードの1つにAspNetUser ID値が指定されていない可能性がありますので、関係はnullですか?もう1つの回避策は、IDが指定されているにもかかわらず、エラーが引き続き発生するこのような奇妙なエラーがあることがあります。

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

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

にi.AspNetUserIDがAspNetUserのIDフィールド(Iドンである:あなたが変数のユーザーに関連するユーザー・データの全てをアップロードしましたので、あなたはから行を変えることができますi.AspNetUserIDを正しい値に置き換えて)、入札テーブルのAspNetUserIDフィールドに置き換えます(正しい名前で置き換えてください)。

これが失敗した場合、見つかったユーザーはNULLです。どこかに問題があります。ユーザーはリンクされておらず、戻って来ないので、適切にリンクされていない入札変数の特定のレコードを特定する必要があります...

+0

私はそれを試したことがあり、同じ例外エラーが発生しています。ところで、AspNetUserはBidオブジェクトを作成し、Idフィールドに自分自身を置くので、AspNetUserテーブルへのnull参照を持つことは不可能です。 – luka032

+0

AspNetUserはBidオブジェクトをどのように作成していますか?ストアドプロシージャまたはトリガでは? –

+0

クライアントサイドでボタンをクリックすると、ログインしたユーザーが入札を作成しているので、手順を実行します。 – luka032