【问题标题】:Telerik OpenAccess - override generated propertiesTelerik OpenAccess - 覆盖生成的属性
【发布时间】:2012-06-25 05:42:20
【问题描述】:

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

像这样。

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

现在我想像这样在我的第二类 Etage(也是部分)中覆盖属性“版本”。

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”之间的歧义

【问题讨论】:

  • 据我所知,您不能覆盖在该类的部分部分内的部分类上声明的方法 - 只能在子类上
  • 我尝试了一个子类,但我无法使用映射器......如果我想插入一个新的“子类”,那么这个类就没有映射......如果我映射它,它将生成新的...
  • 您可以使用模板类 - 例如MappedClass 然后使用 Etage : MappedClass 和 SubEtage : MappedClass 然后在 MappedClass 中你也许可以让它工作。我用 AutoMapper 做到了这一点,它很有魅力
  • 从未听说过模板课程,我会尝试自己教它并希望它能够发挥作用。我从来没有使用过这种方法......但是谢谢你的提示:)你有没有你的代码中的一个例子,用于覆盖泛型类?

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


【解决方案1】:

没有办法覆盖部分类中的属性,您需要在派生类中进行。但是,使用派生类可能无济于事,因为 OpenAccess 上下文将从基类中检索实例,并且没有一种简单的方法可以将这些实例转换为新类型。

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

【讨论】:

    【解决方案2】:

    这可能有效:

    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

    【讨论】:

    • 这对你来说可能完全没用,我会在某个时候下载 Telerik 映射 SDK - 它看起来很有用
    • 好的,如果您可以使用 Telerik SDK 进行尝试,那就太好了,从未见过手动创建地图的方法(如 OpenAccess.CreateMap())。如果你愿意,我可以把我的 Projekt 发给你,所以除了覆盖之外,一切都已经完成了。这也是睡觉时间.. :) 非常感谢您的帮助!
    • 是的,如果你愿意,可以发给我 - 我家里的机器上有快递,我看看能不能打开它,否则我可以打开我的工作笔记本电脑
    • 嗨,伙计,我已经下载了它 - 现在将看看 Telerik ORM
    • 好的,谢谢!希望这个 ORM 有一个解决方案,到目前为止喜欢它:D
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      相关资源
      最近更新 更多