2013-01-06 6 views
7

Sto tentando di riscrivere un'app piuttosto semplice, da C# a F #, ora utilizzando il provider di tipo SqlEntityConnection e sto riscontrando un problema EF: "il La mappatura del tipo CLR al tipo EDM è ambigua ", che può verificarsi dall'apertura di due SqlEntityConnections che hanno ciascuna una tabella con lo stesso nome.Utilizzo di SqlEntityConnection, l'associazione del tipo CLR al tipo EDM è ambigua

In questo caso, tuttavia, è perché EF, attraverso il provider di tipi, apparentemente sta mappando una tabella di sistema. L'errore attuale fa riferimento alla tabella dtproperties -

{ "Schema specificato non è valido Errori: \ r \ nIl mappatura di tipo CLR di tipo EDM è ambiguo perché più tipi CLR corrispondono ai 'dtproperties' di tipo EDM..

Come posso cambiare questa tabella viene mappato tipo CLR 'SqlEntityConnection1.dtproperties' precedentemente trovato tipo CLR 'SqlEntityConnection2.dtproperties', ritrovata. "}? Grazie.

(Questo non è un problema nella versione C# originale, che utilizza anche EF.)

+0

Non so come filtrare le tabelle per cui il provider di tipi genera tipi. Se nel progetto si devono avere due tipi derivati ​​da SqlEntityConnection, proverei prima a inserirli in spazi dei nomi diversi. Se questo non aiuta, suppongo che tu possa sempre cancellare le tabelle "dtproperties" ... –

+0

@JoelMueller Grazie, ho provato la diversa cosa dei namespace, ma non sembra fare la differenza. E sfortunatamente, non posso eliminare dtproperties senza fare arrabbiare gli amministratori di database. :( – rachel

+1

Potresti forse connetterti al database con le credenziali di un utente che non ha il permesso di vedere "dtproperties"? –

risposta

2

È perché si sta utilizzando POCO e dispone di due tipi con lo stesso nome del tipo. EF ignora gli spazi dei nomi e quindi due tipi con lo stesso nome, ma spazi dei nomi diversi sono ambigui per EF. (http://entityframework.codeplex.com/workitem/483)

+0

SqlEntityConnection è strettamente database-first. Nessuna possibilità che ci sia il coinvolgimento di POCO. –

+0

Giusto, sono a conoscenza del problema. Ma in questo caso, EF (tramite il provider del tipo) sta mappando una tabella di sistema, e questo è ciò che sta causando l'errore. Come posso smettere di mappare questa tabella? – rachel

+0

@JoelMueller - Questo non è vero. Il generatore di codice predefinito in VS2010 genererebbe EntityObject ma in VS2012 genererà POCO. Inoltre, anche per VS2010 è possibile utilizzare i modelli POCO T4 che generano tipi POCO per Database First. – Pawel

Problemi correlati