【问题标题】:Entity Framework related objects insertion with stored procedure and auto_increment field使用存储过程和 auto_increment 字段插入实体框架相关对象
【发布时间】:2013-04-15 08:06:20
【问题描述】:

我在通过 Entity Framework 5 插入相关行时遇到问题。我将它与 RIA 服务和 .NET Framework 4.5 版一起使用。数据库系统为 MySQL 5.6。连接器版本为 6.6.5。

引发外键约束异常。

我选择简化模型来暴露我的问题。

LDM

提供者(ID、姓名、地址)

文章(id、名称、价格)

LinkToProvider(provider_id, article_id, provider_price)

// Id 是 auto_increment 列。

首先,我创建了一个 Article 的新实例。我将 LinkToProvider 的一个实例添加到文章的 LinkProvider 集合中。在此 LinkToProvider 对象中,引用了产品本身。还引用了现有的提供程序。 然后我提交更改。

来自 DataViewModel 的示例代码

this.CurrentArticle = new Article();

...

this.CurrentArticle.LinkToProvider.Add(

new LinkToProvider { Article = this.CurrentArticle, Provider = 
this.ProviderCollection.CurrentItem }

);

...

this.DomainContext.articles.Add(this.CurrentArticle);

this.DomainContext.SubmitChanges();

注意:

一开始实体框架就很好地插入了产品。然后它失败了,因为它尝试在 LinkToPrivder 表中插入一行,其产品 ID 未知,如下所示。

INSERT
INTO LinkToProvider
VALUES(5, 0, 1.2)

它放置 0 而不是生成的 id。

但是,如果我单独插入一个产品而没有任何关系,那么产品 ID 会在数据库中正确生成。

任何帮助将不胜感激! 谢谢。

【问题讨论】:

    标签: mysql entity-framework foreign-keys ria auto-increment


    【解决方案1】:

    我找到了答案。 您需要将存储过程中的结果绑定edmx模型中的id列

    所以我必须修改我的存储过程以添加一条指令,以在标准输出上显示文章表的最后插入 id。

    SELECT LAST_INSERT_ID() AS NewArticleId;
    

    然后我添加了与存储过程返回的列名的名称的绑定。这是NewArticleId。

    这里有解释:http://learnentityframework.com/LearnEntityFramework/tutorials/using-stored-procedures-for-insert-update-amp-delete-in-an-entity-data-model/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2012-04-13
      相关资源
      最近更新 更多