Обновление отношений «многие ко многим» в asp.net mvc2 с использованием сущности framework 4.0 - PullRequest
0 голосов
/ 14 февраля 2011

Может кто-нибудь указать, что я делаю неправильно.Я рассмотрел все связанные с этим вопросы на этом сайте, но я думаю, что моя проблема больше связана с MYSQL, как упоминалось об ошибке. Проблема заключается в том, что я пытаюсь обновить отношения между двумя таблицами, используя EF в asp.net mvc2.

У меня есть эти таблицы, и я использую MYSQL.

Курс

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| courseid   | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| coursename | varchar(100)     | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

Факультет:

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| facultyid | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| firstname | varchar(100)     | YES  |     | NULL    |                |
| lastname  | varchar(100)     | YES  |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+

И у меня есть эта таблица для создания отношений

+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| courseid  | int(10) unsigned | NO   | MUL | NULL    |       |
| facultyid | int(10) unsigned | NO   | MUL | NULL    |       |
+-----------+------------------+------+-----+---------+-------+

Теперь, когда я хочу связать курс с факультетом, и курс, и факультет существуют, используя приведенный ниже код, я получил ошибку MYSQL: Ниже

[AcceptVerbs("POST")]
    public ActionResult AddCourse(int id, FormCollection collection)
    {
        //I made this static values for debuging
        Course course = scheduleEnt.Courses1.First(p => p.courseid == 5); //existing course
        Faculty faculty = scheduleEnt.Faculties1.First(p => p.facultyid == 1); //existing faculty
        faculty.courses.Add(course);
        UpdateModel(faculty);
        scheduleEnt.SaveChanges();//This is where the error generated

        var cc = 5;

        return RedirectToAction("AddCourse", new { cid = cc });
    }

Этоошибка:

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
     `course_faculty`.`courseid`,
     `course_faculty`.`facultyid`
' at line 1

1 Ответ

0 голосов
/ 07 июня 2011

ОК, оказалось, что проблема в моем случае заключалась в том, что в таблице ссылок, разрешающей отношение n: m, явно не был установлен первичный ключ.Таким образом, хотя оба поля были только FK, администратор БД не устанавливал их в качестве первичного ключа самостоятельно.

Я обнаружил, что если я посмотрел в исходном файле edmx в разделе ssdlбыли элементы, которые совпадали с ошибкой, которую я получал при попытке выполнить обновление:

<EntitySet Name="x_map" EntityType="DBModel.Store.x_map" store:Type="Tables" store:Schema="xxx" store:Name="x_map">
        <DefiningQuery>SELECT
  `xxx`.`xxx`, 
  `xxx`.`xxx`
  FROM `xxx` AS `xxx`</DefiningQuery>
      </EntitySet>

И затем над определяющим EntityType

<!--Errors Found During Generation:
  warning 6002: The table/view 'xxx.x_map' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
  -->

Изменение схемы БД, чтобы иметь правильные PK иобновление EDMX устранило проблему в моем случае.

Надеюсь, это поможет вам решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...