Database 使用EntityFramework对列进行单向更新

Database 使用EntityFramework对列进行单向更新,database,entity-framework,entity-framework-4,.net-4.0,Database,Entity Framework,Entity Framework 4,.net 4.0,EntityFramework 4.3.1 什么是最好的方法来获得应该存储在db中但不打算从db中检索的计算属性? 例如 我希望在保存到db时保留该值。但当然,当我从db加载时,不会得到更新。我可以有一个空的二传手在旁边。。。但当列是键时,它似乎不起作用 我可以有这样一个关键栏目吗 现在我得到了这个错误: EntityFramework错误:作为对象键一部分的属性值与存储在ObjectContext中的相应属性值不匹配。如果属于密钥一部分的属性返回不一致或不正确的值,或者在对属于密钥一部分的属性

EntityFramework 4.3.1

什么是最好的方法来获得应该存储在db中但不打算从db中检索的计算属性? 例如

我希望在保存到db时保留该值。但当然,当我从db加载时,不会得到更新。我可以有一个空的二传手在旁边。。。但当列是键时,它似乎不起作用

我可以有这样一个关键栏目吗

现在我得到了这个错误:


EntityFramework错误:作为对象键一部分的属性值与存储在ObjectContext中的相应属性值不匹配。如果属于密钥一部分的属性返回不一致或不正确的值,或者在对属于密钥一部分的属性进行更改后未调用DetectChanges,则可能发生这种情况。

首先,将setter设置为私有:

[Column("SOME_COLUMN")]
public ulong SomeColumn { get; private set; }
其次,在对象中添加一个计算方法(这样它就可以访问私有setter):

第三,将
SavingChanges
回调添加到存储库上下文对象(
myenties
)。此回调可以在上下文构造函数中定义,它应该为添加或修改的类型(
MyPoco
)的项设置计算字段:

public MyEntities(){
    this.SavingChanges += (sender, eventArgs) => {
        ObjectContext context = sender as ObjectContext;
        if (context != null)
        {

            foreach (ObjectStateEntry entry in
                context.ObjectStateManager.GetObjectStateEntries(
                EntityState.Added | EntityState.Modified))
            {
                if (!entry.IsRelationship && (entry.Entity.GetType() == typeof(MyPoco)))
                {
                    var myObject = entry.Entity as MyPoco;
                    myObject.CalculateSomeColumn();
                }
            }
        }

    };
}

如果不应从数据库中读取计算属性,那么您使用这些属性的目的是什么?另外,你不能只向数据库中添加一个计算列吗?计算列用于其他应用程序的进一步处理-我的应用程序不需要它们。我无法将计算列添加到数据库-我不负责此操作。
public void CaculateSomeColumn(){
    this.SomeColumn = /* some calculation */;
}
public MyEntities(){
    this.SavingChanges += (sender, eventArgs) => {
        ObjectContext context = sender as ObjectContext;
        if (context != null)
        {

            foreach (ObjectStateEntry entry in
                context.ObjectStateManager.GetObjectStateEntries(
                EntityState.Added | EntityState.Modified))
            {
                if (!entry.IsRelationship && (entry.Entity.GetType() == typeof(MyPoco)))
                {
                    var myObject = entry.Entity as MyPoco;
                    myObject.CalculateSomeColumn();
                }
            }
        }

    };
}