2016-11-15 2 views
0

私はプログラミングの初心者であり、データベースからの選択データに問題があります。私は現在のユーザーのユーザー名を取得することができます(私のデータベースでは、すべてのユーザーに一意です)。私はこのユーザーに関する詳細な情報(ID、名前、姓)をデータベースから取得したいと考えています。私はこれをする方法を知らない。Asp.Net MVCの現在のユーザーについてのユーザー名よりも多くの情報を取得する方法

namespace Aplikacja.DAL 
{ 
    public class AplikacjaContext : DbContext 
    { 
     public DbSet<Konto> MojeKonto { get; set; } 
    } 
} 

これは私のコントローラである:私は、ユーザー名として "PESEL" を使用

public class Konto 
{ 
    public int idUzytkownik { get; set; } 
    public string imie { get; set; } 
    public string nazwisko { get; set; } 
    public string pesel { get; set; } 
    public string haslo { get; set; } 
} 

public ActionResult MojeKonto() 
{ 
    var konto = new Konto 
    { 
     pesel = User.Identity.Name, 
    }; 
    return View(konto); 
} 

これは、モデルの一部である

私はDbContextを作りました。 intelisenceがデータベースを参照していないので、ここで私が問題を持っている -

var user = from u in *** 
     where u = User.Identity.Name 
     select u 

***:

私は、コントローラでこのような何かを試してみました。自分のプログラムで何かを変えたり、違う方法で試してみるべきですか?

+0

データはどのようなものから来ますか? – SLaks

+1

コードを表示できますか?これまでに何を試しましたか? –

+0

今までOKです。 Entity Frameworkを使用してデータベースにアクセスしていますか?次に、ユーザを選択できるどこかの 'DbSet 'を持つ' DbContext'を持っているはずです。 [チュートリアル:MVC5を使用したEF6コードファースト](https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-anentity-framework-data- for-as-asp-net-mvc-application) –

答えて

0

User.Identity.Nameにあるユーザー名を使用してデータベースからロードすると問題はありません。

以下のようなコードが必要な作業を行い、データベースから完全なユーザーオブジェクトを取得するには、提案されたLINQクエリで使用する前にDbContextをインスタンス化する必要があります。それがうまくいかない理由です。また SingleOrDefaultを使用すると(以下同様)、唯一のレコードであるため(または見つからない場合は唯一のレコード)は唯一のものなので、より良い考えです。

public ActionResult MojeKonto() 
{ 
    // Initialise a blank variable for if they're not logged in, or are an invalid user 
    Konto konto = null; 
    // Only try to load if they're logged in 
    if (User.Identity.IsAuthenticated) { 
     // Instantiate the DbContext to connect to database 
     using(var db = new AplikacjaContext()) { 
      // Attempt to load from database using Username, note that 'OrDefault' means if it doesn't exist, "konto" variable will stay null 
      konto = db.MojeKonto.SingleOrDefault(m => m.pesel == User.Identity.Name); 
     } 
    } 

    if (konto == null) { 
     // You could do something here if you can't load more detail about the user if you wanted 
    } 

    return View(konto); 
} 
+0

ありがとうございました!あなたは答えが私をたくさん助けました。もう一つ質問があります。表現データに問題があります。私は@ konto.imieを試しましたが、 'kontoは現在のコンテキストに存在しません'。何をお勧めしますか? – Katniss

+0

ビューでモデル(kontoのタイプ)を持つように設定する必要がある場合は、モデルに関する詳細情報を検索します。次に、Model.imieを使用してビュー内のデータにアクセスします。 –

+0

私は '@モデルAplikacja.Models.Konto'を置く、私は正しいと思いますか?私は最初にそれを行い、@Modelはエラーを引き起こします: "オブジェクト参照がオブジェクトのインスタンスに設定されていません" – Katniss

関連する問題