我基于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/