Laden...

[erledigt] Maximale Namenslänge von Entity im EF 4.3

Erstellt von Abt vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.413 Views
Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren
[erledigt] Maximale Namenslänge von Entity im EF 4.3

verwendetes Datenbanksystem: SQL 2008 R8 EF 4.3

Hi,

hatte schon jemand mal Probleme mit folgender Fehlermeldung?> Fehlermeldung:

ArgumentException: Duplicate type name within an assembly.

Ich habe Entities, die nach der Hierarchie benannt sind. Dabei der Hinweis, dass meine Assembly nichts anderen beinhaltet als die EDMX. Die Entities werden hierbei vom EF 4.3 DbContext Generator via TT-Files erstellt.


HausRaum
   1-* HausRaumReinigung
         | 1-1 HausRaumReinigungIst
                 | 1-* HausRaumReinigungObjektIstSet
         | 1-1 HausRaumReinigungSoll
                 | 1-* HausRaumReinigungObjektSollSet

Das Erstellen eines kompletten Eintrags ist absolut kein Problem
Beim Löschen und beim Anzeigen bekomme ich aber Probleme.

Beim Anzeigen wirft er mir bei den Listen / Collection die Fehlermeldung> Fehlermeldung:

An item with the same key already exists.

Beim Löschen erhalte ich die Fehlermeldung> Fehlermeldung:

ArgumentException: Duplicate type name within an assembly.

Die Fehlermeldungen sind mir bewusst; wenn auch aktuell einfach nicht nachvollziehbar - aber der Stacktrace macht mich stutzig:

Fehlermeldung:
[ArgumentException: Duplicate type name within an assembly.]
System.Reflection.Emit.ModuleBuilder.CheckTypeNameConflict (String strTypeName, TypeBuilder enclosingType) +12518974
System.Reflection.Emit.AssemblyBuilderData.CheckTypeNameConflict (String strTypeName, TypeBuilder enclosingType) +91
System.Reflection.Emit.TypeBuilder.Init (String fullname, TypeAttributes attr, Type parent, Type[] interfaces, Module module, PackingSize iPackingSize, Int32 iTypeSize, TypeBuilder enclosingType) +236
System.Reflection.Emit.ModuleBuilder.DefineTypeNoLock (String name, TypeAttributes attr, Type parent, Type[] interfaces) +113
System.Reflection.Emit.ModuleBuilder.DefineType (String name, TypeAttributes attr, Type parent, Type[] interfaces) +231
System.Data.Objects.Internal.ProxyTypeBuilder.get_TypeBuilder () +393
System.Data.Objects.Internal.ProxyTypeBuilder.CreateType (ModuleBuilder moduleBuilder) +300
System.Data.Objects.Internal.EntityProxyFactory.BuildType (ModuleBuilder moduleBuilder, ClrEntityType ospaceEntityType) +74
System.Data.Objects.Internal.EntityProxyFactory.TryCreateProxyType (EntityType ospaceEntityType) +242
System.Data.Objects.Internal.EntityProxyFactory.GetProxyType (ClrEntityType ospaceEntityType) +151
System.Data.Common.Internal.Materialization.Translator.Visit (EntityColumnMap columnMap, TranslatorArg arg) +322
System.Data.Common.Internal.Materialization.Translator.HandleSpandexRecord (RecordColumnMap columnMap, TranslatorArg arg, RowType spanRowType) +157
System.Data.Common.Internal.Materialization.Translator.Visit (RecordColumnMap columnMap, TranslatorArg arg) +348
System.Data.Common.Internal.Materialization.Translator.ProcessCollectionColumnMap (CollectionColumnMap columnMap, TranslatorArg arg, ColumnMap discriminatorColumnMap, Object discriminatorValue) +289
System.Data.Common.Internal.Materialization.Translator.ProcessCollectionColumnMap (CollectionColumnMap columnMap, TranslatorArg arg) +21
System.Data.Common.Internal.Materialization.Translator.TranslateColumnMap (QueryCacheManager queryCacheManager, ColumnMap columnMap, MetadataWorkspace workspace, SpanIndex spanIndex, MergeOption mergeOption, Boolean valueLayer) +544
System.Data.Common.Internal.Materialization.TypedShaperFactoryCreator1.TypedCreate (QueryCacheManager cacheManager, ColumnMap columnMap, MetadataWorkspace metadata, SpanIndex spanInfo, MergeOption mergeOption, Boolean valueLayer) +114 System.Data.Common.Internal.Materialization.ShaperFactory.Create (Type elementType, QueryCacheManager cacheManager, ColumnMap columnMap, MetadataWorkspace metadata, SpanIndex spanInfo, MergeOption mergeOption, Boolean valueLayer) +252 System.Data.Objects.Internal.ObjectQueryExecutionPlan.Prepare (ObjectContext context, DbQueryCommandTree tree, Type elementType, MergeOption mergeOption, Span span, ReadOnlyCollection1 compiledQueryParameters) +422
System.Data.Objects.EntitySqlQueryState.GetExecutionPlan (Nullable1 forMergeOption) +610 System.Data.Objects.ObjectQuery1.GetResults (Nullable1 forMergeOption) +254 System.Data.Objects.DataClasses.EntityCollection1.Load (List1 collection, MergeOption mergeOption) +269 System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad () +499 System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty (TItem propertyValue, String relationshipName, String targetRoleName, Boolean mustBeNull, Object wrapperObject) +136 System.Data.Objects.Internal.&lt;&gt;c__DisplayClass72.<GetInterceptorDelegate>b__1 (TProxy proxy, TItem item) +153
System.Data.Entity.DynamicProxies.HausRaumReinigungObj_FB667E660961434975C4E7C46592AD4BBD6FDE1B4935E5869864136376E9A23D.get_SollObjekte () +78
ASP._Page_Areas_Scanner_Views_Index_Validierung_cshtml.Execute () in c:\Users\myname\my projects\myprojectname\V639\projectname\Areas\Scanner\Views\Index\Validierung.cshtml:166
System.Web.WebPages.WebPageBase.ExecutePageHierarchy () +280
System.Web.Mvc.WebViewPage.ExecutePageHierarchy () +104
System.Web.WebPages.WebPageBase.ExecutePageHierarchy (WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +157
System.Web.Mvc.ViewResultBase.ExecuteResult (ControllerContext context) +384
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19 () +33
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (IResultFilter filter, ResultExecutingContext preContext, Func1 continuation) +825572 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters (ControllerContext controllerContext, IList1 filters, ActionResult actionResult) +265
System.Web.Mvc.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, String actionName) +825600
System.Web.Mvc.Controller.ExecuteCore () +159
System.Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +335
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5 () +62
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0 () +20
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d () +54
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +469
System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean& completedSynchronously) +375

Etwas weiter unten ist die Zeile zu sehen:
System.Data.Entity.DynamicProxies.HausRaumReinigungObj_FB667E660961434975C4E7C46592AD4BBD6FDE1B4935E5869864136376E9A23D.get_SollObjekte() +78

Eigentlich sollte das hier HausRaumReinigungObjektSoll heißen; er schneidet mir also etwas von der Entity ab.
In meinen Augen kann es nun also sein, dass er HausRaumReinigungObjektIst HausRaumReinigungObjektSoll durch den Abschnitt als identisch erkennt, und mir daher die Fehlermeldung wirft.

In der Datenbank konnte ich absolut keinen Eintrag finden, der auf einen identischen Key hinweist.

Stande jemand schon mal vor diesem Problem?
In den aktuellen Fehlermeldungen bei ADO.NET konnte ich nichts finden; und Beiträge bei Stackoverflow und Co von anderen blieben bislang unbeantwortet.

Ich möcht nur ungern mein Model umschmeißen 😕

Grüße

G
538 Beiträge seit 2008
vor 12 Jahren

Vielleicht ne blöde Frage, aber hast du mal versucht, was passiert, wenn du eine Entity umbenennst (grade im vorderen Teil) - du kannst ja mal nen einzelnen Buchstaben Testweise durch was anderes ersetzen.
Damit findest du (falls vorhanden) sicher auch die Längenbeschränkung...

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

Ja das wird meine letzte Möglichkeit sein - ist nur bei ner produktiven Angelegenheit nicht immer so optimal 😉

G
538 Beiträge seit 2008
vor 12 Jahren

Man testet ja auch an nem Testsystem, ne? 😉

Bei mir hat mal ein von EF definierter Key zu einer ähnlichen Situation geführt.
Das trat dann zumindest bei Select auf, weil er da in EF den Key doppelt hatte, der aber in der DB kein Key war. - Fiel mir grade so ein ...

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

301 Beiträge seit 2009
vor 12 Jahren

An eine maximale Länge des EntityNamens glaube ich nicht

HausRaumReinigungObj = 20 Zeichen

HausRaumReinigungSoll = 21 Zeichen

Schau mal ob bei 2terem auch abgeschnitten wird.

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

Is ne Feature-Erweiterungung - daher "aus der Historie gewachsen". Dass ich das natürlich auf nem Test-System ausprobier, is klar; aber ich muss das ja auch migrieren - leider.

Ja, es wird bei allen abgeschnitten. Die Frage, die ich mir nur stelle, ob das irgendwie stört oder ich völlig auf dem Holzpfad bin.
Ich komm auch gar nicht so weit, dass ich in der Liste schauen könnte, was hier denn krumm ist, denn er kracht ja beim Select.

Da ich also - wie irgendwie viele anderen - allein im Regen steh, wird mir nichts anderes übrig bleiben das Testsystem umzubiegen.

301 Beiträge seit 2009
vor 12 Jahren

Also ich habe damit keine Probleme. Nutze die Selftracking entities auch mit T4 Generator gemacht und meine Klassen sind z.T. auch länger als 20 Zeichen.

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

Auch mit einer ähnlichen Namensbezeichnung, bei denen die ersten 20 Zeichen identisch sind?

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

So, nachdem ich unzählige Stunden in die Daten investiert hatte, da ich auch den glauben hatte, es liegt nicht am Namen: völlig umsonst.

Die Daten waren korrekt und es lag tatsächlich an den Namen der Entities.
Sobald diese bei den Proxies den identischen "Präfix" haben, krachts.

Beim Add funktioniert das ganze, weil hier noch kein Proxy erstellt wurde.
Bei einer View krachts, sobald das Proxy-Binding einsetzt.

G
538 Beiträge seit 2008
vor 12 Jahren

Und hast du auch die "kritische Länge" herausfinden können?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

Ich meine es waren 20 Zeichen.
Erkennt man aber recht einfach; es wird ab einem gewissen Punkt/einer gewissen Länge eben der Name des Entities abgeschnitten und dann die Proxy-ID angefügt.

Ob's hier Versionsunterschiede gibt weiß ich nicht, oder ob der Fehler in EF5 schon weg ist.
Ich wollte es noch zusammen fassen und ans ADO.NET Team schicken.