【问题标题】:Linq-to-Entity get primary key back on insert into OracleLinq-to-Entity 在插入 Oracle 时获取主键
【发布时间】:2012-10-04 02:25:51
【问题描述】:

我是一个带有 Linq-to-Entity 的菜鸟。这些是我的数据库表。

create table Jobs 
( ID            NUMBER PRIMARY KEY,
  ....
)

create table Responsibilities
( ID            NUMBER PRIMARY KEY,
  JobID         NUMBER
  ....
)

JobID 列是引用 Jobs(ID) 的外键。

使用这些表,在 Visual Studio 中,我会自动创建允许我与这些表交互的类。然后我尝试创建作业并将它们插入数据库。我在每个表上都有触发器来为每个表的主键生成一个唯一的 ID。下面是一个创建 Job 的代码 sn-p。

using (Workflow.WorkflowEntities entity = new Workflow.WorkflowEntities(connectionString))
{
    JOBS j = new JOBS();
    entity.AddToJOBS(j);
    entity.SaveChanges();

我遇到的一个问题是,当作业被保存时,我没有得到它的主键。当我想创建 Responsibilities 对象并将它们添加到 Job 然后整体保存所有内容时,这尤其是一个问题。就像它没有在 Responsibilities 对象中正确填充 JobID 字段一样。

这样做的正确方法是什么?任何指针都非常感谢,

mj

【问题讨论】:

标签: c# oracle entity-framework linq-to-entities


【解决方案1】:

我找到了答案。本页最后的第三篇文章。

https://forums.oracle.com/forums/thread.jspa?messageID=9904561

显然 Visual Studio 2010 没有在 XML 中正确保存 StoreGeneratedPattern 属性。

编辑 1:我认为 Visual Studio 2010 服务包 1 解决了这个问题。

【讨论】:

    【解决方案2】:

    您需要在列的属性中设置 StoreGeneratedPattern="Identity"

    【讨论】:

    • 我做了那个改变。我将属性更新为“身份”,但它仍然不起作用。我没有看到 Linq 在插入时生成唯一键。它总是想使用 0,大概是因为当我创建作业对象时,ID 为 0。我还注意到有一个方法 JOBS.CreateJOBS 将 ID 作为输入参数。但它的工作方式并没有什么不同。
    • @mj_ 你仍然需要在 oracle 端使用触发器,linq 没有创建你告诉 linq db 的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多