【问题标题】:Creating a non mapped property in an entity (entity framework)在实体(实体框架)中创建非映射属性
【发布时间】:2017-06-16 23:10:34
【问题描述】:

我想在从数据库映射的我的一个实体上创建一个自定义属性,但是该属性未映射到数据库,我使用部分类创建了该属性,但是在尝试编译时出现错误,告诉我属性未映射。有什么属性或我应该添加的东西吗?提前致谢。

【问题讨论】:

  • 使用部分类是正确的方法,对我来说效果很好。您需要显示您的代码、映射和确切的错误,因为到目前为止您所描述的已经有效。

标签: entity-framework


【解决方案1】:

您还可以使用 [NotMapped] 属性标记您的属性或使用 fluent API 中的 Ignore 方法。

属性

public class EntityName
{
    [NotMapped]
    private string PropertyName { get; }
}

Fluent API

 public class Entities : DbContext
 {
    public DbSet<EntityType> Users { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       // Some database configuration
       modelBuilder.Entity<EntityType>()
             .Ignore(i => i.PropertyName);
     }
 }

【讨论】:

  • 当您想将属性添加到实体对象但不希望它们与数据库或映射文件相关联时,这是一个很好的解决方案
  • 使用 [NotMapped] 属性是最简单的方法,如果您在基类上声明的所有实体(例如 EntityState)上都有所需的属性。无需编辑每个配置类,记住每次引入新实体时都要这样做。
  • 您好,谢谢您的回答。但是当我尝试它时,我得到:“不支持非开放类型的非类型化值。”我做错了什么?
  • @Toodoo,该错误似乎与 OData 与 EF 无关。
  • 因为它是在 OP 不再关心这个话题多年后写的。
【解决方案2】:

使用部分类来添加你想要添加的属性或方法。例如

namespace WhateverNamespaceYourEntityModelIsIn
{
    public partial class  TheNameOfYourEntity
    {
          public string MyNewProperty { get; set; }
    }
}

你应该这样做。

【讨论】:

  • 对于 Code First,请具体参见 Kniganapolke 的回答。使用 [未映射]。
【解决方案3】:

这个页面真的帮助了我。在看到 Kniganapolke 的回答后,我将准确地添加我添加到映射配置中的内容。

 public TheObjectName()
   {
       this.HasKey(t => t.ID);
       this.Ignore(t => t.IsProcess); //we don't want EF to worry about this
    }

谢谢大家,谢谢!

【讨论】:

    【解决方案4】:

    我的谈话严重迟到了,但您还想将部分标记为可序列化,并将属性标记为可序列化 - 如果您打算 JSON 或序列化对象:

    [Serializable()] 
    public partial class MyClass {
        private System.Nullable<int> _Age;
        [global::System.Runtime.Serialization.DataMemberAttribute(Order = 4)] 
        public System.Nullable<int> Age {
                ...
        }
    }
    

    需要 [Serializable()] 和 [global:] 指令。如果您排除了 [global:],则在任何时候序列化它时,它都会被忽略并且不包含在序列化中。

    【讨论】:

    • 太棒了!我一直在旋转我的轮子,试图弄清楚为什么我发布的变量中只有一个始终为空。这成功了!谢谢!
    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2017-02-11
    • 2011-03-09
    相关资源
    最近更新 更多