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

本文关键字:属性 分类 隐藏部 覆盖 | 更新日期: 2023-09-27 18:05:45

我已经看了很多资料,认为以下方法不可行,但如果可能的话,我希望得到专家的确认,并希望得到"最佳"解决方案的建议。

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

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");
        }
    }
}

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

这意味着我最终将自动生成类的几乎每个属性都加倍,这造成了巨大的混乱,因为它们最终都被命名为类似的东西。

我尝试通过制作我自己的对象表示来在部分类的顶部添加一层,但是在实例化依赖于另一个类的类时遇到了问题……假设一个人有一个公司,你实例化person和它的公司,公司实例化公司的人,公司实例化公司的人,公司实例化公司等等。

是否有一些"好"的方法来做我想做的部分类?如果不是,那么有哪些替代方案最有效?也许继承每一个部分类和重写属性?使用OnChange事件来执行检查?

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

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转移到实体框架,它提供了更健壮的验证支持。

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