0

MVC4でWeb/モバイルアプリケーションを開発しようと思っています。ASP.NET MVCについて私が知っていることは、テーブルとモデルクラスの間に1対1の関係がある場合にうまく機能しますが、正規化されたデータベースを操作する必要がある場合はいくつか問題がありました。

- -アップデート - -

過去にLinqtoSQLを使用していたとしても、エンティティデータモデルを使用することを考えています(まだわかりませんが、一見した方が良いようです)。

-

愚かな例:

**table person**
ID
Name
Surname
HairColorID

**table hairColor**
HairColorID
Color

このような状況がMVC4で簡単に解決できるかどうかを知りたいのですが、すべてのテーブルを手動でマップするためにあまり多くのコードを記述しなくてもかまいません。つまり、コントローラーに次のような簡単な方法があるかどうかはわかりません。

public ActionResult About(Person person)

人が自動的に私の2つのテーブルに参加します。

4

2 に答える 2

1

具体的には、データ アクセスを調べます。データベース内の多くのテーブルから作成された複雑なpersonクラスが必要であり、懸念事項を分離する儀式を行わずにオブジェクトをすばやく構築したいと考えているようです。

Dapperを使用すると、オブジェクトを簡単にマップできます。

非常に簡単な例を次に示します。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using Dapper;
namespace DapperTest
{
    class MyEntity
    {
        public int ID { get; set; }
        public string name { get; set; }
        public string Description { get; set; }
    }

    class Program
    {

        public static readonly string connectionString = "Data Source=.;Initial Catalog=sandbox;Integrated Security=True";

        public static SqlConnection GetOpenConnection()
        {
            var connection = new SqlConnection(connectionString);
            connection.Open();
            return connection;
        }

        static void Main(string[] args)
        {
            var c = GetOpenConnection();
            IEnumerable<MyEntity> result = c.Query<MyEntity>(@"select people.id, people.description as name ,beauty.description from people
join peoplebeautylink on peopleid = people.id
join beauty on beautyid = beauty.id ");
            foreach (var myEntity in result)
            {
                Console.WriteLine(myEntity.name);
            }
            Console.ReadKey();
        }
    }
}

MVCのセレモニーを取り除きたい場合。ナンシーを見ることをお勧めします

于 2013-01-14T13:17:53.587 に答える
1

さまざまなプロジェクトを使用して、アプリケーションをいくつかの異なるレイヤーに分割します。

  • 私の AppName.Data プロジェクトは、すべてのデータ アクセス (つまり、データベースからのデータの取得) を処理します。
  • 私の AppName.Models プロジェクトには、アプリに必要なすべてのビュー モデル クラスとその他のモデル クラスが含まれています。
  • 私の AppName.Web プロジェクトは、単なる MVC Web アプリです。
  • 私の AppName.Services プロジェクトは、すべてのビジネス ロジックと、Web レイヤーとデータ レイヤー間の通信を処理します。ビュー モデルの構築、データ検証の処理などを行います。実際のデータベース オブジェクトでコントローラー アクション メソッドを呼び出すことはありません。私は常にビューモデルを使用しています。そのビューモデルには、ビューを作成するために必要なものだけが含まれています。

したがって、この例では、これが読み取り専用ビューである場合に行うことは、次のような AboutPersonDisplayViewModel を作成することです。

public class AboutPersonDisplayViewModel
{
    public int PersonID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public string HairColor { get; set; }
}

そして、それが編集可能なビューである場合、次のような別のビュー モデルがあります。

public class AboutPersonEditViewModel
{
    public int PersonID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public int HairColorID { get; set; }
    public IDictionary<int, string> HairColorOptions { get; set; }
}

データベースでは、person テーブルと hairColor テーブルの間に関係が必要です。したがって、ビュー モデルを構築するときは、検索したい ID の人を取得し、その人の情報を AboutPersonViewModel に入力し、ナビゲーション プロパティを使用して Person.HairColor に移動し、保存されている ID の髪の色を取得します。 .

次に、保存すると、サービス レイヤーがデータを検証し、選択した髪の色を適切にマッピング/保存します。

これが役立つことを願っています

于 2013-01-14T11:07:40.837 に答える