我一直在尝试使用TryGetObjectByKey找到依据上下文新增实体:EF4是否总是使用临时密钥来添加新实体?
Dim ObjectFound As Boolean = Context.TryGetObjectByKey(entityKey, obj)
我发现TryGetObjectByKey总是失败,即使我知道,实体我一直在寻找已被添加到上下文。有问题的实体使用的电子邮件地址作为主键,并通过构造函数的实体(它不是由DB生成的)提供的email地址:
Public Class Customer
Private _email as string
Public Sub New (Email as string)
'Email is the primary key in the DB and the entity key in EF4.
'It is not generated by the DB.
_email = Email
End Sub
End Class
经过进一步调查,我发现了EntityKeys为所有添加的实体都没有值,并且它们的IsTemporary标志被设置为true。 TryGetObjectByKey失败,因为添加对象的EntityKey尚未设置。
我最初的印象是EntityKey会在调用AddObject时立即生成,如果EntityKey不是由DB生成的。所以,有两个问题:
1)我应该期望所有新添加的实体都有临时的EntityKeys吗?
2)如果#1为真,我如何通过主键找到新增的实体?