0

私は MvcScaffolding を使用してクイック CRUD インターフェイスを構築するプロジェクトに取り組んでいます (Steven Sanderson に感謝します)。 C#)。

DEFAULT (getdate())に相当する SQL の列と、プロジェクトのフォーム認証を介してログインしているユーザーの名前を表す varchar フィールドを追加したいと思います(これは を保存HttpContext.Current.User.Identity.Nameしていると思いますが、確かではありません)。

最終的な目標は、ユーザーがログインできるようにすることです。新しいレコードを作成して保存します。次に、リスト/インデックス ページは、ユーザー名がCreatedByフィールドに格納されているレコードのみを返します (SQL では、 のようなものWHERE CreatedBy = <HttpContext.Current.User.Identity.Name>)。

どんな提案でも大歓迎です!

4

1 に答える 1

1

あなたの痛みが分かります。私自身、この問題に遭遇したことを覚えています。

残念ながら単純な答えは、Code First で使用できる既定の注釈がまだないということです。Code First に関しては、まだ多くのことが望まれています。

以下は、Entity Framework が提供する利用可能なすべての注釈のリストです。ご覧のとおり、まだ少し制限されています。

http://msdn.microsoft.com/en-us/library/gg197525(v=VS.103).aspx

Entity Framework を使用する場合、私自身は、ゼロから作成したデータベースから生成された単純な EDMX ファイルを使用することに依存しています。これにより、すべての CRUD ステートメントを記述することを心配する必要がなくなり、ささいなことを制御できます。

MVC スキャフォールディングに関する限り、EDMX ファイルは Code First モデルとまったく同じように機能します。私は MVC スキャフォールディングの大ファンで、複数のプロジェクトで EDMX ファイルと共に使用しています。

ユーザー名が CreatedBy フィールドに保存されているレコードを返すという目標に関して。この問題を解決する方法はたくさんあります。LINQ を使用してクエリを作成することも、ストアド プロシージャを自分で作成して EDMX ファイルと共にインポートすることもできます (Code First で EDMX を使用するもう 1 つの利点です)。

LINQ を使用すると、次のようになります。

    public List<Record> GetAllRecordsByUserName(string credentials)
    {
        List<Record> recordList;
        using (CustomEntities context = new CustomEntities())
        {

            IQueryable<Section> recordQuery = from records in context.Records
                                                  where records.UserName == credentials
                                                  select records; 
            recordList = recordQuery.ToList<Record>();
        }
        return recordList;
    }


ストアド プロシージャの記述に関しては、ストアド プロシージャを TSQL で記述するだけです。EDMX ファイルが生成されたら、画面を右クリックして [関数のインポート] を選択します。そこからストアド プロシージャを見つけ、それを目的のオブジェクトに自動的にマッピングするか、オブジェクト タイプが存在しない場合は新しい複合タイプを作成するかを選択できます。これは非常に強力なツールであり、上記の LINQ ステートメントを使用するよりも優れたパフォーマンスを発揮します。

于 2012-05-03T19:03:23.810 に答える