防止自动生成的类的隐藏属性

时间:2018-05-30 21:16:29

标签: c# entity-framework

情况

我有几个从数据库自动生成的类,它们共享一些常见属性,其中包含属性 Name 。我需要一个变量 CurrentItem ,它可以保存这些类的任何实例,无论其类型如何,因此我可以访问它们的公共属性。

为了实现这一点,我创建了一个只实现公共属性的基类<header id="navigation__base"> <h1 id="navigation__title"> <a id="navigation__link" href="#">PLANS DU BAC</a> </h1> <label id="search__base"> <input id="search__input" type="search" /> <img id="search__icon" src="./ressources/media/search-icon.svg" alt="" /> </label> </header>,并且我使所有(部分)类继承它。

问题

我收到消息DBItem修复似乎很简单,除了我的类是自动生成的,因为它们是从我的数据库派生的。因此我无法应用推荐的解决方案。

这可能被视为一个简单的警告,并被忽略。不过我觉得它在我的程序中会引起一些问题。特别是,当创建DBItem时,它似乎有两个不同的 Name 属性。一个名为 Name 的名称正确填充,一个名为名称(Entity.DBItem),即'MyClass.Name hides inherited member DBItem.Name. Use the new keyword if hiding was intended.。如果我尝试使用null访问 Name 属性,则结果为null。

如何解决此问题,以便我可以从CurrentItem.Name访问名称属性?

修改

附加信息: 以下是自动生成的类的示例:

DBItem

这是基础非常简单的类DBItem:

namespace LTG_Entity
{
    using System;
    using System.Collections.Generic;

    public partial class Environment
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Environment()
        {
            this.TemplateEnvironments = new HashSet<TemplateEnvironment>();
            this.Packages = new HashSet<Package>();
            this.Metas = new HashSet<Meta>();
        }

        public int Id { get; set; }
        public string Nom { get; set; }
        public string Desc { get; set; }
        public string Code { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<TemplateEnvironment> TemplateEnvironments { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Package> Packages { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Meta> Metas { get; set; }
    }
}

我使用edmx和VisualStudio 2017。

0 个答案:

没有答案