Telerik OpenAccess - 覆盖生成的属性

时间:2012-06-22 21:32:05

标签: c# .net orm override telerik-open-access

我想验证通过Telerik OpenAccess Mapper生成的属性的(IDataErrorInfo)。

喜欢这个。

public partial class Etage
{
    private long _version;
    public virtual long Version 
    { 
        get
        {
            return this._version;
        }
        set
        {
            this._version = value;
        }
    }...

现在我想在我的第二个类Etage(也是部分)中覆盖属性“Version”。

public partial class Etage : IComparable
{

    public override long Version
    {
        get { return _version; }
        set { _version = value+200; }
    }

    // Some Validation in the Setter later...
    public override string ToString()
    {
        return String.Format("{0}", Version);
    }
}

然后我收到以下错误:

'Inventar.Model.Etage.Version'和'Inventar.Model.Etage.Version'之间的歧义

3 个答案:

答案 0 :(得分:1)

没有办法覆盖分部类中的属性,您需要在派生类中执行此操作。但是,使用派生类可能没有帮助,因为OpenAccess上下文将从基类中检索实例,并且没有简单的方法将它们转换为新类型。

您可以做的是添加一个具有不同名称的属性(在分部类中),该属性执行必要的计算。然而,这意味着您将在模型上暴露两者。为了解决这个问题,您可以通过可视化设计器更改生成的属性的访问修饰符。只需找到属性并将属性窗格中的访问修饰符更改为与public不同的内容。

答案 1 :(得分:0)

这可能有效:

public partial class SubEtage : Etage
{

    public override string Beschreibung
    {
        get { return base.Beschreibung; }
        set { base.Beschreibung = value + "GEHT"; }
    }

    public override string ToString()
    {
        return String.Format("{0}", Beschreibung);
    }
}

并查看链接:

http://www.telerik.com/help/openaccess-orm/openaccess-tasks-howto-single-class-single-table.html

答案 2 :(得分:0)

您可以通过修改其使用的TT templates来控制OpenAccess代码生成器如何创建代码。以下是一些可以让您走上正确轨道的链接: