Entity framework 4 oracle插入父对象和子对象的实体框架

Entity framework 4 oracle插入父对象和子对象的实体框架,entity-framework-4,oracle11g,Entity Framework 4,Oracle11g,我们正在ASP.NET应用程序中使用EF 4.2,该应用程序与Oracle的EF提供商的Oracle 11 g数据库链接。 父表称为CASE_阶段,主键名为ID。子表称为CASE_阶段,主键名为ID。这两个表的主键都使用插入前触发器插入。这意味着触发器可能是问题所在 这段代码看起来像我在Julia Lerman的书中找到的示例,但只插入了一个新的案例阶段。没有引发异常,但未插入子项 //from the controllers CREATE with hard coded values for

我们正在ASP.NET应用程序中使用EF 4.2,该应用程序与Oracle的EF提供商的Oracle 11 g数据库链接。 父表称为CASE_阶段,主键名为ID。子表称为CASE_阶段,主键名为ID。这两个表的主键都使用插入前触发器插入。这意味着触发器可能是问题所在

这段代码看起来像我在Julia Lerman的书中找到的示例,但只插入了一个新的案例阶段。没有引发异常,但未插入子项

//from the controllers CREATE with hard coded values for testing purposes
        // POST: /CasePhase/Create

        [HttpPost]
        public ActionResult Create(CASE_PHASE case_phase)
        {


            var caseStage = new CASE_STAGE
                                {
                                    CREATED_BY_USER_ID = 1604,
                                    LAST_MODIFIED_BY_USER_ID = 1604,
                                    CURRENT = 1,
                                    STAGE_ID = 1752,
                                    DATE_CREATED = DateTime.Now,
                                    DATE_LAST_MODIFIED = DateTime.Now
                                };

            if (ModelState.IsValid)
            {
                //join new stage to phase
                caseStage.CASE_PHASE = case_phase;
                //attach linked entities to context
                //debugging shows case_phase has the values it needs   
                //but caseStage does not
                db.CASE_PHASE.Attach(case_phase);
                db.CASE_PHASE.Add(case_phase);
                db.SaveChanges();

我缺少什么?

在看到有关未复制StoreGeneratedPattern=“Identity”的更改的错误后,我确保Visual Studio有service pack 1。所有主键现在都已在模型中正确标识

序列已经创建。修改StoreGeneratedPattern后,我必须修改触发器,以便在主键为null时触发insert。在代码中设置主键的值并不重要。如果主键具有标识模式,则EF不会将值发送到数据库

这是可行的,但很愚蠢,一个链接事务两次提交

使用ADO DBContext和Oracle Entity Framework Beta(我不希望在现在发布的生产版本中出现不同的行为,因为Oracle使用的触发器/序列思想似乎与EF不太协调

或者,您可以将ID字段保留为StoreGeneratedPattern的默认设置,然后使用database.SqlQuery直接从数据库获取主键。将其添加到父级,然后将其作为外键添加到子级


您可以选择:从dual中选择一个序列和一个db.SaveChanges,这至少符合原子事务或两个db.SaveChanges的概念。

使用XML编辑器打开.edmx文件,并查找以以下行开头的部分:

<!-- SSDL content -->

下面应该是EntityType标记,其中包含数据库表的定义。此外,ID列的属性中包含StoreGeneratedPattern=“Identity”

<!-- SSDL content -->