[英]How to setup table per type inhertiance in entity framework when the derived table uses its own primary key?
[英]MySql + entity framework = Every derived table must have its own alias
我必須從我的 C# 程序中訪問另一個開發人員的一些 MySql 視圖。
所以經過一番搜索,我決定實體框架,並使用這個問題中提到的驅動程序: Using MySQL with 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 請求有什么問題的響應,但我無法影響實體框架如何構建這些。
除了接受的答案之外,還應注意,如果您嘗試將數據庫中的更改保存在沒有主鍵的表上,則會引發相同的異常( Every derived table must have its own alias
)。
這是一個多年后仍未修復的已知錯誤(出現在 2012 年 4 月 4 日的 MySQL 5.5.22 +.Net/Connector 6.5.4 中)。
我知道沒有主鍵的表不是一個好主意,但是由於 DDL 生成器中存在另一個錯誤,因此在沒有主鍵的情況下創建了一些關聯實體鍵的屬性StoreGeneratedPattern
設置為None
的表...
我也有同樣的情況。 我的表沒有主鍵,我得到了同樣的例外。 我的解決方案不是很好,但它可能對某人有用。
var settings = dataModel.Settings.ToList();
var setting = settings[0];
需要那些 object 關系映射器,並且一行的 ID 相同。 它在 ORM 內部使用。 我知道其他 ORM 工具,例如 NHibernate 和 Hibernate。 同兆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.