“属性不可更新”的属性

时间:2017-11-06 06:43:03

标签: c# entity-framework

我有一个应用程序(webservice),其中许多对象被插入数据库或更新(使用Entity Framework),但从未读过。所以我甚至没有对这个数据库的读访问权 现在,新要求需要插入一些属性,但永远不会更新。我保存所有这样的对象:

Type t = obj.GetType();
db.Set<TT>().AddOrUpdate(MapObject<TT>(obj)); //Maps to database entity and saves object

现在的问题是,如果有一个属性我可以告诉要插入的属性,但在更新时会被忽略?最好的情况是这样的:

[InsertOnly]
public string SomeText { get; set; }

2 个答案:

答案 0 :(得分:1)

unit of work保存例程中,选中ChangeTracker并删除标记为更新的记录或属性。像这样:

var modifiedItems = _dbContext.ChangeTracker.Entries()
    .Where(x => x.State == EntityState.Modified)
    .ToList();

EntityState有以下类型:

  • 独立式
  • 不变
  • 已添加
  • 已删除
  • 修饰

答案 1 :(得分:0)

您可以添加自定义属性。

public class InsertOnly : Attribute
{}

如果我们考虑

在EF对象上,您可以添加自定义属性:

public class SomeEFClass {
       [InsertOnly]
       public int Id {get;set;}
   }

然后改变

db.Set<TT>().AddOrUpdate(MapObject<TT>(obj)); //Maps to database entity and 

包含类似的内容(这是伪代码,不要指望它运行)

foreach(Property info pi in t.GetProperties())
{
    if(pi.GetCustomAttribute<InsertOnly>() == null)
    {
        //You can safely update this property
    }
    else
    {
        //This property is only for inserting
    }
}

我不确定您是否可以通过属性的部分类重载添加自定义属性?那可能值得一试?