【问题标题】:Return entity key after savechanges doesn't worksavechanges 不起作用后返回实体键
【发布时间】:2011-09-22 09:31:07
【问题描述】:

我有这段代码

            IMG_UPLOAD_FILES tObjUploadedFile = new IMG_UPLOAD_FILES();

            tObjUploadedFile.UPLOAD_FILE_NAME = "testname.png";
            tObjUploadedFile.SETTINGS_FOLDER_ID = 2;

            dbHandler.IMG_UPLOAD_FILES.AddObject(tObjUploadedFile);
            dbHandler.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);

            decimal tmpID= tObjUploadedFile.UPLOAD_FILE_ID;

tmpID 仍然为 0,并且永远不会返回密钥。

我已在必填字段中将 StoreGeneratedPattern 设置为 Identity。

我正在使用来自 ORACLE 数据库的最新 ODB.NET。

\T

【问题讨论】:

  • 以 XML 格式打开您的 EDMX,并验证存储生成的模式在 SSDL(表定义)和 CSDL(实体定义)部分中的配置是否正确。
  • ` `
  • 那是 CSDL。您是否也按照@LadislavMrnka 的建议检查了 SSDL?
  • <EntityType Name="IMG_UPLOAD_FILES"><Key><PropertyRef Name="UPLOAD_FILE_ID" /></Key><Property Name="UPLOAD_FILE_ID" Type="number" Nullable="false" /><Property Name="UPLOAD_FILE_NAME" Type="nvarchar2" MaxLength="255" /><Property Name="SETTINGS_FOLDER_ID" Type="number" /></EntityType>

标签: c# .net oracle entity-framework


【解决方案1】:

我能找到的最接近的答案是:

因为Oracle使用了Sequence+Trigger来制作“Auto Ident”值,所以好像实体框架在保存时添加了一个对象,返回值还是0,因为trigger/sequence还没有更新.

所以解决这个问题的唯一方法是在保存对象后再次获取它。

\T

【讨论】:

    【解决方案2】:

    对我来说,解决方法是手动(是的,手动!)进入 edmx,在 SSDL 部分添加 StoreGeneratedPattern="Identity" 属性,在 CSDL 部分添加 annonation:StoreGeneratedPattern="Identity"

    它在 SQL 方面没有损坏,但在 Oracle 方面肯定是损坏了。

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 2011-05-03
      • 1970-01-01
      • 2023-01-29
      相关资源
      最近更新 更多