Sto "giocando" un po' con LinQ, ma non riesco a fare una cosa come vorrei:
ho una relazione "1 a molti", da un parte una classe "utenti" e dall'altra una "comunicazioni" (messaggi da inviare ai singoli utenti), dal punto di vista relazionale ho una tabella utenti e una tablela comunicazioni che ha una chiave esterna "IdUtente" che identifica l'utente al quale è rviolta la comunicazione
le classi sono fatte così: (ho escluso proprietà non rilevanti)
Utente
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "int NOT NULL IDENTITY")]
public int Id { get; set; }
[Column]
public string Nome { get; set; }
private EntitySet<Comunicazione> _Comunicazioni = new EntitySet<Comunicazione>();
[Association(Name = "UtCom", Storage = "_Comunicazioni", OtherKey = "_IdUtente", DeleteOnNull = false)]
public EntitySet<Comunicazione> Comunicazioni
{
get { return this._Comunicazioni; }
set { this._Comunicazioni.Assign(value); }
}
ed ecco
Comunicazione
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "int NOT NULL IDENTITY")]
public int Id { get; set; }
[Column]
public string Messaggio{ get; set; }
[Column(Name = "IdUtente")]
private int _IdUtente;
private EntityRef<Utente> _utenteRef = new EntityRef<Utente>();
[Association(Name = "UtCom", Storage = "_utenteRef", ThisKey = "_IdUtente", IsForeignKey = true, DeleteOnNull = false)]
public Utente utente
{
get { return this._utenteRef.Entity; }
set { this._utenteRef.Entity = value; }
}
La classe "comunicazione" funziona a meraviglia, cioè se faccio:
mydc bdt = new mydc();
Utente ut = bdt.Utenti.Single(u => (u.Id == _userId));
Comunicazione com = new Comunicazione {
Messaggio = "MESSAGGIO";
utente = ut
}
bdt.Comunicazioni.InsertOnSubmit(com);
bdt.SubmitChanges();
la riga nella tabella "comunicazione" viene creata e la chiave esterna correttamente impostata
MENTRE se faccio
mydc bdt = new mydc();
Utente ut = bdt.Utenti.Single(u => (u.Id == _userId));
Comunicazione com = new Comunicazione {
Messaggio = "MESSAGGIO"
}
ut.Comunicazioni.Add(com);
bdt.SubmitChanges();
la riga viene creata MA la chiave esterna viene impostata a "0" e non con l'id dell'utente....
DOVE SBAGLIO? (lo so che funziona cmq ma è per capire)
Grazie in anticipo