0

一連の tsql ストアド プロシージャと通信する DAL (ADO.NET) を使用する MVC 3 アプリケーションがありますか? 現在のソリューションに新しい MVC プロジェクトを追加したいと考えています。2 つの MVC プロジェクト ("Monitor" と "Audit") が共有できる別のプロジェクトに DAL が必要です。

以下は、現在の DAL (「Monitor」MVC プロジェクトのフォルダーにある) コードです。私の問題は、Monitor.Models にある IEnumerable と Audit.Models にある IEnumerable のような署名を持っていることです。DAL 内のモデルへの参照を作成する必要がないように、DAL をジェネリックにする必要がありますか?

Ex: 
**//Is this bad practice?**
    using Monitor.Models;
    using Adit.Models;



namespace Monitor.DAL
{
    public class QuestionDAL
    {
        static ILog log = log4net.LogManager.GetLogger(typeof(QuestionDAL));
        private string _connectionString = WebConfigurationManager.ConnectionStrings["NexGenContext"].ToString();

        public IEnumerable<AgencyTerm> SearchAgencies(string ori, string name)
        {
            log.Debug("Executing: SearchAgencies(string ori, string name)");
            List<AgencyTerm> agencies = new List<AgencyTerm>();
            using (var conn = new SqlConnection(_connectionString))
            {
                var com = new SqlCommand();
                com.Connection = conn;
                com.CommandType = CommandType.StoredProcedure;
                string term = "Ori";

                if (!String.IsNullOrEmpty(ori)) 
                {
                   term = "Ori";
                   com.Parameters.Add(new SqlParameter
                   {
                        ParameterName = "@ORI",
                        Value = ori
                    });
                }
                if (!String.IsNullOrEmpty(name))
                {
                    term = "legal_name";
                    com.Parameters.Add(new SqlParameter
                    {
                        ParameterName = "@Name",
                        Value = name
                    });
                }
                com.CommandText = "Review_Get_Agency_List";
                var adapt = new SqlDataAdapter();
                adapt.SelectCommand = com;
                var dataset = new DataSet();
                adapt.Fill(dataset);

                agencies = (from c in dataset.Tables[0].AsEnumerable()
                            select new AgencyTerm()
                                         {
                                             label = c[term].ToString(),
                                             id = c["Agency_Id"].ToString()
                                         }).ToList<AgencyTerm>();

                return agencies;
            }

        }

        public IEnumerable<User> GetUsers()
        {
            log.Debug("Executing: GetUsers()");
            List<User> users = new List<User>();
            using (var conn = new SqlConnection(_connectionString))
            {
                var com = new SqlCommand();
                com.Connection = conn;
                com.CommandType = CommandType.StoredProcedure;
                com.CommandText = "Review_Get_Users";
                var adapt = new SqlDataAdapter();
                adapt.SelectCommand = com;
                var dataset = new DataSet();
                adapt.Fill(dataset);

                users = (from c in dataset.Tables[0].AsEnumerable()
                            select new User()
                            {
                                User_ID = Convert.ToInt32(c["User_ID"]),
                                Department = c["Department"].ToString(),
                                Enabled = Convert.ToBoolean(c["Enabled"]),
                                Email = c["Email"].ToString(),
                                User_First_Name = c["User_First_Name"].ToString(),
                                User_Last_Name = c["User_Last_Name"].ToString(),
                                Location = c["Location"].ToString(),
                                User_Name = c["User_Name"].ToString()
                            }).ToList<User>();

                return users;
            }

        } 
4

1 に答える 1

1

次の 2 つの可能性があります。

  • モデルも別のライブラリに移動してから、MVC プロジェクトと DAL から参照します。
  • DAL を完全にジェネリックにし、内部に値をプッシュするだけです。DALには多くの情報があるため、ここでは簡単な方法はわかりません

私は最初のオプションを使用します。モデルを別のプロジェクトに抽出し、そのライブラリを DAL と MVC プロジェクトの両方で再利用するだけです

于 2013-05-08T19:11:35.380 に答える