visual studio net instalar from framework example data create c# ado.net-entity-data-model

c# - studio - instalar ado net entity data model



Marco de la entidad: establecer una propiedad de clave externa (6)

Tenemos una tabla que se ve más o menos así:

CREATE TABLE Lockers { UserID int NOT NULL PRIMARY KEY (foreign key), LockerStyleID int (foreign key), NameplateID int (foreign key) }

Todas las claves se relacionan con otras tablas, pero debido a la forma en que se distribuye la aplicación, es más fácil para nosotros pasar las ID como parámetros. Entonces nos gustaría hacer esto:

Locker l = new Locker { UserID = userID, LockerStyleID = lockerStyleID, NameplateID = nameplateID }; entities.AddLocker(l);

Podríamos hacerlo en LINQ-to-SQL, pero no en EF?


Puede crear un método de extensión que construya la entidad en función de estas ID.


El uso de una EntityKey resuelve su problema;)

alk.


Esta característica que falta parece molestar a mucha gente.

  • Buenas noticias: MS abordará el problema con .NET 4.0.
  • Malas noticias: por ahora, o si estás atascado en 3.5 tienes que hacer un poco de trabajo, pero ES posible.

Tienes que hacerlo así:

Locker locker = new Locker(); locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID); locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID); locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID); entities.AddLocker(locker); entities.SaveChanges();


Lo que he estado haciendo para facilitar las cosas es agregar la propiedad de la clave externa yo mismo en la clase parcial:

public int UserID { get { if (this.User != null) return this.User.UserID; } set { this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value); } }


otro método, si no te molesta ''polucionar'' tu esquema db es agregar una columna calculada, por ejemplo, si tuvieras un campo de clave foránea FK_Customer podrías definir una nueva columna calculada FK_Customer_Computed que tiene la expresión FK_Customer. Cuando genere / actualice su modelo de edmx, el campo aparecerá como un campo normal al que podrá hacer referencia desde su objeto de entidad.

O espera por EF4 :)


Siguiendo con la respuesta de Dylan, Alex James ha escrito un blog sobre esto precisamente, explicando el problema completo y cómo abordar la solución parcial de clase + propiedad.

Faking Foreign Keys - EF3.5