我有一个应用程序(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; }
答案 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
}
}
我不确定您是否可以通过属性的部分类重载添加自定义属性?那可能值得一试?