如何重写部分类属性

本文关键字:分类 属性 重写 何重写 | 更新日期: 2023-09-27 18:02:03

我有一个局部类,我想做如下的事情:

[MetadataType(typeof(UserMetaData))]
public partial class Person
{
    public override string PrivateData
    {
        get
        {
            return customDecrypt(base.PrivateData);
        }
        set
        {
            base.PrivateData = customEncrypt(value);
        }
    }
}

上面的方法不起作用。

是否有一种方法来覆盖基本实体框架类的属性,以允许自定义getter/setter?

如何重写部分类属性

部分类与继承无关,override完全是关于继承的。

类上的partial关键字仅仅意味着它可以在同一个程序集中多次声明。这就像你把每个partial class的每个部分都复制到同一个文件中,然后去掉partial关键字一样。因为你不能在同一个类中定义相同的属性/函数等两次,所以你不能在同一个类的两个不同的部分中定义它两次,即使使用partial关键字。

另一方面,

override派生的类中使用,以表明它们正在替换它们继承的基类的功能。如果它没有显式继承,它继承自object,这允许您覆盖ToString()(以及其他)。

您最好的选择是使用自定义T4模板来生成加密/解密逻辑,或者在设计器中将加密属性设置为protectedprivate,并手动添加public版本来进行解密。

如果您可以更改代码生成器,您可以使用非常强大的部分方法轻松地"模拟"它("覆盖"默认值)。

https://msdn.microsoft.com/en-us/library/wa80x488.aspx

虽然您不能覆盖实体框架基类,但有一个解决办法。在.edmx模型中(首先是DB,如果是代码,直接在实体中),在你想要"重写"的属性上,将Getter/Setter更改为private并重命名该属性。然后使用公共名称创建带有属性的部分类,这将不再发生冲突。

在公共部分类属性中,如果需要,您将能够访问私有重命名属性。