5

Ho tabelle del database che assomigliano a questo:Entity Framework cardinalità problema in un ... 0 1 Associazione

Schema Diagram

Un Task può essere associata a un Module, o non mappate a tutti (0. ..1). Sto utilizzando il database di Entity Framework e, quando ho generato il modello dal database, l'entità dell'attività è arrivata con i moduli come una raccolta (0 o più). Così ho aperto il mio EDMX e cambiato la proprietà di navigazione "Moduli" su Attività a 0 ... 1.

EDMX

Ora, quando si tenta di compilare, ottengo questo errore:

Error 3003: Problem in mapping fragments starting at line 1241:Given the cardinality of Association End Member Task, it should be mapped to key columns of the table TaskModule. Either fix the mapping or change the multiplicity of this end.

non capisco che cosa devo fare per risolvere questo problema. Ho esaminato i dettagli dell'associazione e non riesco a vedere il problema. So che probabilmente mi manca qualcosa di stupido, ma sono completamente bloccato. proprietà dell'associazione:

TaskModule Association

Visual Studio 2010 SP1, Entity Framework 4.3.1.0, SQL Server 2008 R2.

risposta

5

Un modo per eseguire questa operazione è ridefinire la chiave primaria per la tabella TaskModule. Invece della chiave primaria (TaskId, ModuleName) deve essere solo (TaskId). Quindi eseguire un aggiornamento del modello dal database e modificare manualmente qualsiasi associazione che non è stata rilevata da tale aggiornamento.

+0

non ha senso avere una tabella TaskModule. ModuleName dovrebbe essere una chiave straniera nullable in Task –

+2

@ Raphaël Althaus Mi sembra una risposta filosofica (cioè viola il 3 ° NF, ma è discutibile se lo si debba o no). Puoi indicarmi il materiale che supporta il tuo POV? Dai un'occhiata a http://stackoverflow.com/questions/1723808/nullable-foreign-key-bad-practice – Dean

+0

Questa è una grande domanda che hai collegato, Dean. Immagino di essere in minoranza, forse sono vecchia scuola, ma le chiavi straniere nullable mi fanno davvero fregare. Ho modificato la tabella TaskModule come suggerito e ora tutto funziona correttamente. –

1

Bene lo schema del database non è corretto con la descrizione si dà:

tavolo TaskModule implica una relazione molti-a-molti, non è una relazione molti-a-oneOrZero.

In edmx, le tabelle delle relazioni molti-a-molti non vengono visualizzate, ma esistono ancora nel database.

Quindi dovresti sistemare il tuo database, o essere soddisfatto della relazione proposta da EF!