我基于sql图创建了两个c类contacts和customers(见图片)
我只是想看看我做的是否正确,我需要一些建议?向下数据库关系图和类客户和联系人

Customer Class


 public class Customer
    {
        public int CustomerID { get; set; }
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Postion { get; set; }
        public Char Gender { get; set; }
        public DateTime BecomeCustomer { get; set; }
        public DateTime ModifiedDate { get; set; }



        public Customer() { }


        public static bool AddNewCustomer_Contact(Customer cust,Contacts cont)
        {
            try
            {
                // get a configured DbCommand object
                DbCommand comm = GenericDataAccess.CreateCommand();


                //Set the store Proc name
                comm.CommandText = "AddNewCustomer_Contact";

                //create new parameter @Title
                DbParameter param = comm.CreateParameter();
                param = comm.CreateParameter();
                param.ParameterName = "@Title";
                param.Value = cust.Title;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @FirstName
                param = comm.CreateParameter();
                param.ParameterName = "@FirstName ";
                param.Value = cust.FirstName;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @LastName
                param = comm.CreateParameter();
                param.ParameterName = "@LastName";
                param.Value = cust.LastName;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @Postion
                param = comm.CreateParameter();
                param.ParameterName = "@Postion ";
                param.Value = cust.Postion;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @BecomeCustomer
                param = comm.CreateParameter();
                param.ParameterName = "@BecomeCustomer";
                param.Value = DateTime.Now;
                param.DbType = DbType.DateTime;
                comm.Parameters.Add(param);

                //create new parameter @Gender
                param = comm.CreateParameter();
                param.ParameterName = "@Gender";
                param.Value = cust.Gender;
                param.DbType = DbType.String;
                comm.Parameters.Add(param);

                //create new parameter @ModifiedDate
                param = comm.CreateParameter();
                param.ParameterName = "@ModifiedDate";
                param.Value = DateTime.Now;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @LabelContactTypeID
                param = comm.CreateParameter();
                param.ParameterName = "@LabelContactTypeID";
                param.Value = cont.LabelContactTypeID;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @ContactDetails
                param = comm.CreateParameter();
                param.ParameterName = "@ContactDetails";
                param.Value = cont.ContactDetail;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @Status
                param = comm.CreateParameter();
                param.ParameterName = "@Status";
                param.Value = cont.Status;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);

                //create new parameter @Notes
                param = comm.CreateParameter();
                param.ParameterName = "@Notes";
                param.Value = cont.Notes;
                param.DbType = DbType.StringFixedLength;
                comm.Parameters.Add(param);


                return (GenericDataAccess.ExecuteNonQuery(comm) != -1);

            }
            catch
            {
                return false;
            }
        }
    }
Contact Class

public class Contacts
{
    public int ContactsID { get; set; }
    public int CustomerID { get;set; }
    public string ContactDetail { get; set; }
    public bool Status { get; set; }
    public int LabelContactTypeID { get; set; }
    public string Notes { get; set; }


}

最佳答案

在设计类时,第一步是确定需要哪些类以及它们的属性/职责是什么。据我所知,你唯一想代表的高层是客户。客户是您的高级类,我的意思是客户的某些属性可以由其他对象(如姓名、联系人等)构成。
此外,一些字段(如id)在数据库之外没有任何意义(我假设在本例中id是customer表的主键)。如果您打算将您的类模型建立在数据库设计(规范化设计)的基础上,那么我建议您在继续处理类模型之前先“不规范”您的设计。规范化提供的优化仅在关系模型的范围内,通常不应扩展到内存表示的类。
此外,正如@yatrix所建议的,最好从实际的数据模型中抽象出数据访问层。
以下是一些建议,

public class Customer
{
    // public int CustomerID { get; set; } // Database specific primary key
    public string Title { get; set; }
    public string FirstName { get; set; } // Is the setter required to be publicly exposed?
                                          // Or can it be private to the class?
    public string LastName { get; set; }  // FirstName and LastName can be part of a nested class
                                          // Name, so that the access is more natural...
                                          // Customer.Name.FirstName
    public string Postion { get; set; }
    public Char Gender { get; set; } // Can be an enumeration
    public DateTime BecomeCustomer { get; set; }
    public DateTime ModifiedDate { get; set; }
    public IList<Contact> Contacts { get; private set; } // The getter can be private and you can
                                                         // expose only some methods like
                                                         // Customer.GetContactOfType(type)


    public bool AddContact(Contact contact)
    {
         // ...
    }

    public bool RemoveContact(Contact contact)
    {
         // ...
    }
}

public class Contact
{
    public string ContactDetail { get; set; } // Can be named as Detail or something more specific
    public bool Status { get; set; } // Can be enumeration
    public ContactType Type { get; set; } // ContactType is an enumeration
    public string Notes { get; set; }
}

关于c# - 如何将数据库表设计转换为C#类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12946412/

10-13 08:06
查看更多