MySql +实体框架=每个派生表必须有自己的别名
本文关键字:别名 自己的 派生 实体 框架 MySql | 更新日期: 2023-09-27 18:05:26
我必须从我的c#程序访问另一个开发人员的一些MySql视图。
所以经过一番搜索,我决定使用实体框架,并使用在这个问题中提到的驱动程序:使用MySQL与实体框架(MySQL . net连接器)。
现在,我试图获得一个视图的第一个元素:
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请求错误的响应,但我无法影响实体框架如何构建这些。
除了可以接受的答案之外,应该注意的是,如果您试图将数据库中的更改保存在没有主键的表上,则会抛出相同的异常(Every derived table must have its own alias
)。
这是一个已知的错误,多年后仍然没有修复(在12年4月4日出现在MySQL 5.5.22 + . net/connector 6.5.4)。
我知道没有主键的表不是一个好主意,但是由于DDL生成器中存在另一个错误,一些关联实体键的属性StoreGeneratedPattern
设置为None
的表是在没有主键的情况下创建的…
我也有同样的情况。我的表没有主键,我得到了同样的异常。我的解决办法不是很好,但可能对某人有用。
var settings = dataModel.Settings.ToList();
var setting = settings[0];
这些对象关系映射器要求对一行使用相同的id。它在ORM内部使用。我知道其他ORM工具,比如NHibernate和Hibernate。同样siu