覆盖或隐藏部分类中的属性

时间:2011-08-16 00:47:22

标签: c# oop linq-to-sql

我现在已经阅读了很多内容并认为以下内容是不可行的,但我希望尽可能得到专家的确认,并可能就“最佳”解决方法提出建议。

在所有自动生成的linq-to-sql类中,我最终将所有属性加倍,以便在设置值时对值进行检查,例如,我有一个Person类,其中包含Name属性做起来:

public partial class Person
{
    public string Name
    {
        get { return this._Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
            {
                value = value.trim();
                this._Name = value.Substring(0, Math.Min(value.Length, 200));
            }
            else
                throw new InvalidOperationException("Person name cannot be blank");
        }
    }
}

简单检查以确保当我持久保存到数据库时,名称不会超过最大长度。

这意味着我最终会加倍自动生成的类中的每一个属性,并且会造成大量混乱,因为它们最终被命名为类似的东西。

我尝试通过自己的对象表示在部分类的顶部添加一个层,但在实例化依赖于另一个的类时遇到了问题...说一个人有公司,你实例化了人和公司为公司实例化人员,重新安置公司等......

是否有一些“好”的方式来做我想要对部分类做的事情?如果没有,哪种替代方案效果最好? 也许继承每一个部分类并覆盖属性?使用OnChange事件来执行检查?

2 个答案:

答案 0 :(得分:2)

建议的方法在ScottGu的博客文章中列出:http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx

再次,这里

http://geekswithblogs.net/AzamSharp/archive/2008/03/30/120875.aspx

此外,您可能希望研究从L2S迁移到实体框架,它提供了更强大的验证支持。

答案 1 :(得分:1)

听起来像你试图让linq到sql做一些它从未打算做的事情。当我遇到这样的情况时,我开始寻找一个更适合我想要完成的工具/库/ orm等