Entity framework 4 实体框架继承创建协同响应实体

Entity framework 4 实体框架继承创建协同响应实体,entity-framework-4,Entity Framework 4,我有一个EF模型,逻辑上我有一个“模板”类型和一个“模板类型的实例” 基本上,我的模板就像一个工作流,实例就是那些应用于对象的模板。关联是一个模板有零到多个实例,一个实例总是基于一个模板。例如,模板可以是“send letter”,应用于客户以创建已发送信函的实例,其中包括发送日期、信函的pdf等 模板有几个子类/类型,这些子类/类型将始终匹配一个实例,该实例也有相应的子类 问题是如何确保在创建实例(将有对模板的引用)时,该实例是正确的继承类型 例如,如果模板的类型为TemplateType2(

我有一个EF模型,逻辑上我有一个“模板”类型和一个“模板类型的实例”

基本上,我的模板就像一个工作流,实例就是那些应用于对象的模板。关联是一个模板有零到多个实例,一个实例总是基于一个模板。例如,模板可以是“send letter”,应用于客户以创建已发送信函的实例,其中包括发送日期、信函的pdf等

模板有几个子类/类型,这些子类/类型将始终匹配一个实例,该实例也有相应的子类

问题是如何确保在创建实例(将有对模板的引用)时,该实例是正确的继承类型

例如,如果模板的类型为TemplateType2(继承自模板),并且我向loan1添加了一个实例。。loan1.TemplateInstances.add(foo)…我想确保foo的类型为InstanceType2

我现在做这件事的方式看起来像是一种恶作剧。我将实例实体名称作为标量值存储在模板实体中,并使用反射创建正确类型的实例

它可以工作,但基本上是使用属性的值进行映射,如果它们与实例名称的名称不匹配,或者如果它们输入了错误的实体名称,则可能会出现各种错误


如何解决这个问题,你有什么想法吗

我最后通过一点技巧解决了这个问题。 我使用命名约定并将自己的处理程序添加到context savingchanges方法中 然后是一点反思。这不是最好的解决方案,但很有效

主要部分

   For Each entry As ObjectStateEntry In DirectCast(sender, ObjectContext).ObjectStateManager.GetObjectStateEntries(EntityState.Added)
            If Not entry.IsRelationship Then

[blah blah...snip]    

ObjectName = Me.GetType.ToString
                    If ObjectName = "QSEntityFrameWork.TaskTemplate" Then
                        ObjectName = "QSEntityFrameWork.TaskInstance"
                    Else
                        ObjectName = ObjectName.Replace("Task", "Instance")
                    End If
                    oh = Activator.CreateInstance("QSEntityFrameWork", ObjectName)
                    Dim obj As Object = oh.Unwrap
                    obj.TaskTemplateID = Me.TaskTemplateID
                    obj.TaskStartDate = DateTime.Now
                    obj.ProcessInstanceID = ProcessIntanceID
                    Return obj