类属性和sql相关方法的类继承最佳实践

时间:2012-08-18 23:33:41

标签: c# asp.net .net sql-server

#region Properties
public int ID
{
    get;
    set;
}
public string Name
{
    get;
    set;
}
public string MetaTitle
{
    get;
    set;
}
public string MetaDescription
{
    get;
    set;
}
public virtual int WebsiteID
{
    get;
    set;    
}
public DateTime TimeStamp
{
    get;
    set;
}
#endregion Properties

#region Methods 
public void Insert()
{
    string sqlString = "INSERT INTO Pages ([name], [value], [meta_title], [meta_description], [website_id]) " +
        "VALUES (@Name, @Image, @Description, @MetaTitle, @MetaDescription, @WebsiteID);";
    SqlConnection sqlConnection =
        new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    using (SqlCommand sqlCommand = new SqlCommand(sqlString, sqlConnection))
    {
        sqlCommand.Parameters.AddWithValue("@Name", this.Name);
        sqlCommand.Parameters.AddWithValue("@Image", this.Image);
        sqlCommand.Parameters.AddWithValue("@Description", this.Description);
        sqlCommand.Parameters.AddWithValue("@MetaTitle", this.MetaTitle);
        sqlCommand.Parameters.AddWithValue("@MetaDescription", this.MetaDescription);
        sqlCommand.Parameters.AddWithValue("@WebsiteID", this.WebsiteID);
        try
        {
            sqlConnection.Open();
            sqlCommand.ExecuteNonQuery();
            sqlConnection.Close();
            sqlConnection.Dispose();
        }
        catch (SqlException e)
        {
        }
    }
}

两个问题:

我有另一个名为Section的类,它将从上面的类中派生出来。但是,Section不会有WebsiteID,而是会有PageID。它们都是整数,但我如何更改属性名称是派生类。

第二件事是,override Insert()方法应该使用另一个sqlString吗?如果没有,实施此类要求的最佳方式是什么?

提前致谢。

2 个答案:

答案 0 :(得分:0)

我有另一个名为Section的类,它将派生自该类 上面叫做Page。但是,Section不会有WebsiteID但会有 有一个PageID而不是。他们都是整数,但我该如何去做 更改属性名称是派生类。

错误是你的页面包含section对象,所以你不必从Page派生Section:Page必须有一个section的集合

class Page
{
     private Section[] sections;
     public Section[] Sections {get;set;}
}

答案 1 :(得分:0)

我认为你的遗产可能有点过时了。 “部分”不是“页面”,或者是它?

为什么没有一个基类,称为Content或类似的东西,具有属性:

public int ID { get; set; }
public string Name { get; set; }
public string MetaTitle { get; set; }
public string MetaDescription { get; set; }
public DateTime TimeStamp { get; set; }

Page扩展它,添加WebsiteID和添加PageID的部分。

但我还建议将实体模型与数据访问分开。使用像Entity Framework或NHibernate这样的东西来处理持久性会使您不必手动编写代码。

通过这种方式,您可以拥有更多连接模型,其中Section实际引用Page实体,而不是手动处理ID。同样Page可以以相同的方式包含Sections(例如List<Section>),并且您可能拥有更清晰的模型。