MySql + entity framework =每个派生表都必须有自己的别名

我必须从我的C#程序访问另一个开发人员的一些MySql视图。

因此,经过一些搜索,我决定entity framework,并使用此问题中提到的驱动程序: 使用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.GetEnumerator() at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) at System.Data.Objects.ELinq.ObjectQueryProvider.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请求有什么问题的回复,但我无法影响entity framework如何构建它们。

除了接受的答案之外,应该注意的是,如果您尝试在没有主键的表上保存数据库中的更改,则将抛出相同的exception( Every derived table must have its own alias )。

这是一个已知的错误 ,多年后仍然没有修复(出现在MySQL 5.5.22 + .Net / Connector 6.5.4于04/04/12)。

我知道拥有一个没有主键的表并不是一个好主意,但是由于DDL生成器中存在另一个错误,因此创建了一些没有主键的关联实体键将属性StoreGeneratedPattern设置为None表…

我有同样的情况。 我的表没有主键,我得到了同样的例外。 我的解决方案不是很好,但它可能对某人有用。

 var settings = dataModel.Settings.ToList(); var setting = settings[0]; 

那些对象关系映射器需要和行的相同id。 它在ORM内部使用。 我知道其他ORM工具,如NHibernate和Hibernate。 同样的