如何使用 Entity Framework 1 和 Entity Framework 更新多对多相关对象MySQL?

发布于 2024-09-18 02:11:47 字数 1646 浏览 3 评论 0原文

我有这样的问题。我将 EF1 与 VS2008 SP1 和 VS2008 SP1 一起使用。 MySQL 与 MySQL Connector/Net 6.3.4

我的数据库架构如下所示:

CREATE TABLE IF NOT EXISTS `credential` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `user_credential` (
  `user_id` int(11) NOT NULL,
  `credential_id` int(11) NOT NULL,
  KEY `credential_id` (`credential_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `user_credential`
  ADD CONSTRAINT `user_credential_ibfk_2` FOREIGN KEY (`credential_id`) REFERENCES    `credential` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `user_credential_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE;

当我尝试执行以下代码时,我遇到异常,我无法理解

var entities = new studyEntities();

var user = new User { Name = "test" };
var credential = new Credential { Name = "admin" };

entities.AddToCredentialSet(credential);
entities.AddToUserSet(user);

entities.SaveChanges();
user.Credentials.Add(credential);
entities.SaveChanges(); // He I have a strange exception thrown


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT
  `user_credential`.`credential_id`, 
  `user_credential`.`user_' at line 1

它是什么意思?我怎样才能看到整个查询以找出其中的问题?或者也许我做错了什么?

I have such a problem. I'm using EF1 with VS2008 SP1 & MySQL with MySQL Connector/Net 6.3.4

My database schema looks like this:

CREATE TABLE IF NOT EXISTS `credential` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

CREATE TABLE IF NOT EXISTS `user_credential` (
  `user_id` int(11) NOT NULL,
  `credential_id` int(11) NOT NULL,
  KEY `credential_id` (`credential_id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `user_credential`
  ADD CONSTRAINT `user_credential_ibfk_2` FOREIGN KEY (`credential_id`) REFERENCES    `credential` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `user_credential_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE;

While I'm trying to execute the folowing code I have exception that I cannot understand

var entities = new studyEntities();

var user = new User { Name = "test" };
var credential = new Credential { Name = "admin" };

entities.AddToCredentialSet(credential);
entities.AddToUserSet(user);

entities.SaveChanges();
user.Credentials.Add(credential);
entities.SaveChanges(); // He I have a strange exception thrown


You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT
  `user_credential`.`credential_id`, 
  `user_credential`.`user_' at line 1

What does it mean? How can I see the whole query to seek the problem in it? or maybe what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

羁〃客ぐ 2024-09-25 02:11:47

我有同样的错误,因为我在中间表中没有主键。

这为我解决了这个问题:

CREATE TABLE IF NOT EXISTS `user_credential` (
  `user_id` int(11) NOT NULL,
  `credential_id` int(11) NOT NULL,

  PRIMARY KEY(`user_id`, `credential_id`)
  KEY `user_id` (`user_id`)

  CONSTRAINT .... FOREIGN KEY....
  CONSTRAINT .... FOREIGN KEY....

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

I had the same error because I had no primary key in the middle table.

This fixed it for me:

CREATE TABLE IF NOT EXISTS `user_credential` (
  `user_id` int(11) NOT NULL,
  `credential_id` int(11) NOT NULL,

  PRIMARY KEY(`user_id`, `credential_id`)
  KEY `user_id` (`user_id`)

  CONSTRAINT .... FOREIGN KEY....
  CONSTRAINT .... FOREIGN KEY....

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
淡紫姑娘! 2024-09-25 02:11:47

看起来像连接器 /NET 中的错误。
我们进行了测试,此代码在 dotConnect fro MySQL 中成功。

Looks like a bug in Connector /NET.
We have made a test, this code succeeded in dotConnect fro MySQL.

凉风有信 2024-09-25 02:11:47

向多对多表添加主键。

因此,如果您的表是

CREATE TABLE If Not Exists SubsidiaryMapping
(   
    CompanyId bigint NOT NULL,
    SubsidiaryId bigint NOT NULL,

    -- Add Primary Key composing exisiting keys
    -- Following fixed issue for me
    PRIMARY KEY(CompanyId , SubsidiaryId ), 

    CONSTRAINT .... FOREIGN KEY....
    CONSTRAINT .... FOREIGN KEY....
);

Add a primary key to the many-to-many table.

So if your table is

CREATE TABLE If Not Exists SubsidiaryMapping
(   
    CompanyId bigint NOT NULL,
    SubsidiaryId bigint NOT NULL,

    -- Add Primary Key composing exisiting keys
    -- Following fixed issue for me
    PRIMARY KEY(CompanyId , SubsidiaryId ), 

    CONSTRAINT .... FOREIGN KEY....
    CONSTRAINT .... FOREIGN KEY....
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文