如何将属性引用为插入数据库计算字段的 ForeignKey(从视图)?
我有以下内容:
public class PersonSite
{
public int Id {get;set;}
//...
public int PersonId {get;set;}
[ForeignKey("PersonId")]
public virtual Person Person {get;set;}
//...
}
public class Person
{
public Id {get;set;}
//...
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int? MainPersonSiteId { get; protected internal set; }
[ForeignKey("MainPersonSiteId")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public PersonSite MainPersonSite { get; protected internal set; }
//...
}
每当我尝试更新 aPerson
时,我都会收到以下异常:
信息:
ReferentialConstraint 中的依赖属性映射到存储生成的列。列:'MainPersonSiteId'。堆栈跟踪:
在 System.Data.Entity.Core.Mapping.Update.Internal.UpdateCompiler.BuildSetClauses(DbExpressionBinding 目标,PropagatorResult 行,PropagatorResult originalRow,TableChangeProcessor 处理器,布尔插入模式,Dictionary`2& outputIdentifiers,DbExpression& 返回,Boolean&rowMustBeTouched)在 System.Data。 Entity.Core.Mapping.Update.Internal.UpdateCompiler.BuildUpdateCommand(PropagatorResult oldRow,PropagatorResult newRow,TableChangeProcessor 处理器)在 System.Data.Entity.Core.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode,UpdateCompiler 编译器)
在数据库中,即 Sql Server 12,Person 来自一个视图,其中 MainPersonSiteId 是从一个函数投影的。这是一个计算字段,不需要由 ORM 更新。
如何用 EntityFramework 定义它?
编辑 :
DatabaseGeneratedOption.Identity
我只是通过设置而不是设法使更新工作DatabaseGeneratedOption.Computed
,但是我发现插入仍然损坏。所以我用DatabaseGeneratedOption.Computed
背面测试了插入物,它......工作了:/
情况是:
- 我只能使用 DatabaseGeneratedOption.Computed 插入
- 我只能使用 DatabaseGeneratedOption.Identity 进行更新
奇怪的是,MSDN 说让DatabaseGeneratedOption.Computed
数据库为插入和更新生成一个值,而DatabaseGeneratedOption.Identity
只为插入生成一个值