【发布时间】:2017-06-16 23:10:34
【问题描述】:
我想在从数据库映射的我的一个实体上创建一个自定义属性,但是该属性未映射到数据库,我使用部分类创建了该属性,但是在尝试编译时出现错误,告诉我属性未映射。有什么属性或我应该添加的东西吗?提前致谢。
【问题讨论】:
-
使用部分类是正确的方法,对我来说效果很好。您需要显示您的代码、映射和确切的错误,因为到目前为止您所描述的已经有效。
标签: entity-framework
我想在从数据库映射的我的一个实体上创建一个自定义属性,但是该属性未映射到数据库,我使用部分类创建了该属性,但是在尝试编译时出现错误,告诉我属性未映射。有什么属性或我应该添加的东西吗?提前致谢。
【问题讨论】:
标签: entity-framework
您还可以使用 [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);
}
}
【讨论】:
使用部分类来添加你想要添加的属性或方法。例如
namespace WhateverNamespaceYourEntityModelIsIn
{
public partial class TheNameOfYourEntity
{
public string MyNewProperty { get; set; }
}
}
你应该这样做。
【讨论】:
这个页面真的帮助了我。在看到 Kniganapolke 的回答后,我将准确地添加我添加到映射配置中的内容。
public TheObjectName()
{
this.HasKey(t => t.ID);
this.Ignore(t => t.IsProcess); //we don't want EF to worry about this
}
谢谢大家,谢谢!
【讨论】:
我的谈话严重迟到了,但您还想将部分标记为可序列化,并将属性标记为可序列化 - 如果您打算 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:],则在任何时候序列化它时,它都会被忽略并且不包含在序列化中。
【讨论】: