Pregunta

En este escenario, tengo una base de datos existente con tres modelos:

Address, que tiene un 'AddressId', 'ParentId', 'Ciudad', 'Estado', etc

Person, que tiene un 'PersonId', 'Nombre', etc.

Company, que tiene un 'CompanyId', 'Nombre', etc.

Porque Address puede contener filas para obtener más modelos de una sola tabla, no hay ninguna clave externa;el Address la columna 'ParentId' contendría un 'PersonId' o 'CompanyId'.

Para generar mi DbContext, He utilizado Entity Framework Herramientas eléctricas Beta 2.Debido a la falta de integridad referencial, las clases que se generan para Person y Company no contienen una colección de direcciones como se debe.

Cómo se podría ir sobre la alteración de esas clases para agregar en esta "Direcciones" de la propiedad, y garantizar que se asignan a la Dirección de la tabla correctamente?

En este momento estoy haciendo algo como esto;Prefiero tener el mapa de contexto, si es posible:

public IEnumerable<Address> Addresses
{
   get 
   {
       IEnumerable<Address> addresses = null;
       using(MyDb db = new MyDb())
       {
            addresses = db.Addresses.Where(a => a.ParentId == this.PersonId)
       }

       return addresses;
   }
}

Gracias!

¿Fue útil?

Solución

Si puede, debe agregar un ID único a la tabla de direcciones y luego almacenar esa ID con la entidad a la que pertenece, ya sea una persona, compañía, proveedor, etc.

Si no puede debido al escenario de direcciones múltiples, puede crear una nueva tabla de Tabla DrendsXref que almacena la GUID de las entidades (proveedor, persona, empresa, etc.) y el GUID de la dirección;Por lo tanto, cada entidad podría tener una dirección múltiple y EF estarán bastante contentos con esta configuración, ya que habrá llaves alrededor.

(También quiero algún tipo de indicador de tipo de dirección en la tabla de Xref, así que supongo qué tipo de dirección fue, enviando por correo, envío, etc.)

Otros consejos

Crear clases parciales para ambos Company y Person que tiene la propiedad que usted ha creado en ella.

public partial class Company
{
   public IEnumerable<Address> Addresses { ... }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top