0

最初にスタック オーバーフローに踏み込みます。最善を尽くします。

以下、ADO.NET (mysql データベース) からの私のモデル

http://img585.imageshack.us/img585/4533/screenshot20120519at143.png

// CHECK USER+PASS
rmEntities2 myDb = new rmEntities2();
var query = from c in myDb.users
            where c.use_login == run.name
            where c.use_password == run.pass
            select c.use_id;

if (query.Count() == 0)
{
    return "ERROR USER/PASSWORD";
}
else
{
    // Linq insert DB
    running newRun = new running();
    newRun.run_start_time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0)
        .AddSeconds(Double.Parse(run.start));
    newRun.run_end_time = new System.DateTime(1970, 1, 1, 0, 0, 0, 0)
        .AddSeconds(Double.Parse(run.stop));
    newRun.run_distance = (float)run.distance;
    newRun.run_nbfootsteps = run.nbfootsteps;
    newRun.run_vo2max = run.vo2Max;

    foreach (int u in query)
    {
        newRun.user.use_id = u;
    }

    myDb.AddTorunnings(newRun);
    myDb.SaveChanges();
    return "RUNNING ADDED";
}

問題は次の行にあります。

newRun.user.use_id = u;

実行中のテーブルでユーザーから run_use_id を設定したいと思います。

最善の方法は何ですか?

4

1 に答える 1

2

use_id行に値を設定しようとすると、

newRun.user.use_id = u;

あなたはを取得していNullReferenceExceptionます。これは、newRun.userがnullであるためです。新しい実行はユーザーに関連付けられていません。

を使用する代わりに、を使用することをお勧めしuse_idますuser

var query = from c in myDb.users
            where c.use_login == run.name
            where c.use_password == run.pass
            select c;
var user = query.SingleOrDefault();

そして、これらのいずれか:

newRun.user = user; 
// or 
user.runnings.Add(newRun);

どちらも同じことをしますが、あなたにとってより意味のある方を使用してください。

于 2012-05-19T17:04:05.143 に答える