【问题标题】:Adding A Custom Property To Entity Framework?向实体框架添加自定义属性?
【发布时间】:2011-04-27 10:00:18
【问题描述】:

我是第一次使用实体框架,想知道以下是否可行 - 我已经从数据库生成了我的类,并且有一个名为 Category。

显然它在表中有我的所有字段(ID、CategoryName、SortOrder 等),但我想知道我是否可以添加一个不在表中但实际上是自定义方法的结果的自定义属性.

我想添加一个名为“CategoryURL”的新属性,它基本上是通过自定义方法运行的“CategoryName”属性并返回一个连字符字符串。

我最初的想法是继承生成的 Category 类并在里面创建类似的东西?

public string CategoryURL 
{
    get{ return MyCustomMethod(this.CategoryName) }
}

这是正确的方法吗? 'this.CategoryName' 会像我认为的那样工作吗?基本上最终结果是当我返回一个“类别”列表时,我希望它成为类的一部分,以便我可以在我的 foreach 循环中使用它。

希望这有意义吗?

【问题讨论】:

    标签: c# asp.net linq entity-framework


    【解决方案1】:

    你应该使用partial 类:

    public partial class Category
    {
        public string CategoryURL  
        { 
            get{ return MyCustomMethod(this.CategoryName); } 
        } 
    }
    

    这样this.CategoryName 将按预期工作。

    这是因为实体框架代码生成器生成的类也会生成partial 类。这也意味着您可以安全地从数据库中重新生成类,而不会影响您自己定义的部分类。

    【讨论】:

    • 这很聪明!在某种程度上,这有点令人毛骨悚然,因为它看起来聪明了。我们是否有理由相信微软可能会在未来的 EF 版本中打破这一点?我想我应该太担心了,因为这个答案已经将近四年了,而且对我有用!
    • @VivianRiver “我们有理由相信微软可能会在未来的 EF 版本中打破这一点吗?” - partial-classes 是 C# 的东西,与实体框架无关。此外,它是 EF 中实体类如何工作的基础,包括最新版本的 EF Core:尽管 EF Core 的脚手架脚本和模板(用于从现有数据库设计生成实体类型)相当贫血所以我总是推荐使用这个:github.com/sjh37/…
    【解决方案2】:

    您应该将[NotMapped] 属性添加到属性

    【讨论】:

    • 我想补充一点,只有getset 的属性才需要[NotMapped] 属性。如果你有一个只读属性(例如一个没有set 的计算属性),那么[NotMapped] 是不必要的。
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多