MySql + Entity Framework = Каждая производная таблица должна иметь свой собственный псевдоним - PullRequest
4 голосов
/ 14 августа 2011

У меня есть доступ к некоторым представлениям MySql другого разработчика из моей программы на C #.

Таким образом, после некоторого поиска я решил использовать структуру сущностей и использовать драйвер, упомянутый в этом вопросе: Использование MySQL с Entity Framework ( MySQL .NET Connector ).

Теперь я пытаюсь получить первый элемент одного представления:

myEntities.events.First();

и там я получаю исключение:

System.Data.EntityCommandExecutionException was unhandled
  Message=An error occurred while executing the command definition. See the inner exception for details.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
       at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
       at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
       at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
       at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
       at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__0[TResult](IEnumerable`1 sequence)
       at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
       at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
       at System.Linq.Queryable.First[TSource](IQueryable`1 source)
       at J4N.GroopleReports.ReportManager.DataImporter.GenerateEvent(GroopleEntities groopleEntities) in C:\Users\J4N\Dropbox\WorkSpaces\DotNET\GroopleReports\ReportManager\DataImporter.cs:line 35
       at J4N.GroopleReports.ReportManager.DataImporter.Import() in C:\Users\J4N\Dropbox\WorkSpaces\DotNET\GroopleReports\ReportManager\DataImporter.cs:line 17
       at ImportTest.Program.Main(String[] args) in C:\Users\J4N\Dropbox\WorkSpaces\DotNET\GroopleReports\ImportTest\Program.cs:line 15
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: MySql.Data.MySqlClient.MySqlException
       Message=Every derived table must have its own alias
       Source=MySql.Data
       ErrorCode=-2147467259
       Number=1248
       StackTrace:
            at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
            at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
            at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
            at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
            at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
            at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
            at MySql.Data.Entity.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
            at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
            at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
       InnerException: 

Я искал чтоэта ошибка «Каждая производная таблица должна иметь свой собственный псевдоним» и как ее устранить, я нашел несколько ответов в сети о том, что неправильно в запросе SQL, но я не могу повлиять на то, как структура объектов создает их.

Ответы [ 3 ]

7 голосов
/ 05 апреля 2012

В дополнение к принятому ответу следует отметить, что будет выдано то же исключение (Every derived table must have its own alias), если вы попытаетесь сохранить изменения в базе данных в таблице, не имеющей первичного ключа.

Это известная ошибка , которая все еще не исправлена ​​спустя годы (появилась в MySQL 5.5.22 + .Net / Connector 6.5.4 от 04/04/12).

Я знаю, что не имеет смысла иметь таблицу без первичного ключа, но, поскольку в генераторе DDL есть еще одна ошибка, некоторые таблицы, в которых связанный ключ сущности имеет свойство StoreGeneratedPattern, установленное на None, создаются без первичный ключ ...

1 голос
/ 09 апреля 2012

У меня такая же ситуация.В моей таблице нет первичного ключа, и я получаю то же исключение.Мое решение не очень хорошее, но может кому-то пригодиться.

var settings = dataModel.Settings.ToList();
var setting = settings[0];
0 голосов
/ 14 марта 2013

Те объектные реляционные мапперы, которые требуются и имеют идентичный идентификатор для строки. Он используется внутри ORM. Я знаю другие инструменты ORM, такие как NHibernate и Hibernate. То же самое

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