Pregunta

¿Cómo puedo asignar estas tablas existentes a las clases de abajo?

Tengo las siguientes tablas:

CREATE TABLE dbo.UserContact (
  UserContactId int NOT NULL IDENTITY (1, 1),
  UserId int NOT NULL,
  ContactId int NOT NULL,
  UserContactTypeId int NOT NULL,
  FromDt datetime NULL,
  ThruDt datetime NULL,
  CreateDt datetime NOT NULL,
  UpdateDt datetime NULL,
  IsDeleted bit NULL,
  CanSolicit bit NOT NULL
) 

CREATE TABLE dbo.Contact (
  ContactId int NOT NULL IDENTITY (1, 1),
  CreateDt datetime NOT NULL,
  UpdateDt datetime NULL
)

CREATE TABLE dbo.Electronic (
  ContactId int NOT NULL,
  URL nvarchar(512) NOT NULL,
  ElectronicType smallint NULL
)

CREATE TABLE dbo.Phone (
  ContactId int NOT NULL,
  AreaCode nchar(3) NOT NULL,
  PhoneNb nchar(7) NOT NULL,
  Extension nchar(6) NULL,
  PhoneType smallint NULL
)

CREATE TABLE dbo.Postal
(
  ContactId int NOT NULL,
  Street nvarchar(256) NOT NULL,
  Specifier nvarchar(256) NULL,
  GeocodeId int NULL
)

Las tablas electrónico, teléfono y Postal están en una relación uno-a-uno con contacto. El UserContact tabla está en una relación muchos-a-uno con contacto; UserContact es una tabla de asociación entre el usuario y de contacto.

También tiene las siguientes clases:

public class Electronic : IntegerKeyEntity
{
    public virtual ContactId { get; set; }
    public virtual DateTime CreateDt { get; set; }
    public virtual DateTime? UpdateDt { get; set; }
    public string Url { get; set; }
    public ElectronicType Type { get; set; }
}

public class Postal : IntegerKeyEntity
{
    public virtual ContactId { get; set; }
    public virtual DateTime CreateDt { get; set; }
    public virtual DateTime? UpdateDt { get; set; }
    public string Street { get; set; }
    public string Specifier { get; set; }
    public Geocode Geocode { get; set; }
}

public class Phone : IntegerKeyEntity
{
    public virtual ContactId { get; set; }
    public virtual DateTime CreateDt { get; set; }
    public virtual DateTime? UpdateDt { get; set; }
    public string AreaCode { get; set; }
    public string PhoneNb { get; set; }
    public string Extension { get; set; }
    public PhoneType Type { get; set; }
}

public class UserContact : IntegerKeyEntity
{
    private ICollection<Electronic> electronics = new HashSet<Electronic>();
    private ICollection<Phone> phones = new HashSet<Phone>();
    private ICollection<Postal> postals = new HashSet<Postal>();

    // props

    public virtual IEnumerable<Electronic> Electronics { get { return electronics; } }
    public virtual IEnumerable<Phone> Phones { get { return phones; } }
    public virtual IEnumerable<Postal> Postals { get { return postals; } }
}

Por lo tanto, yo puedo obtener de las cuatro mesas de contacto (padre e hijo) hasta las tres clases? Y, ¿cómo Mapa esas tres clases a la mesa UserContact. Estoy asumiendo que puedo tener tres ILists, uno para cada clase.

¿Fue útil?

Solución

creo que estás modelando esta manera incorrecta. Me parece que la electrónica, teléfono, y se extienden Postal (Heredar de) Contacto y esto se debe expresar en su modelo de dominio. Estas clases no están relacionados con contacto por uno-a-uno, que son tipos de hormigón que se extienden del resumen Tipo de contacto. Si modelar de esta manera se puede contactar mapa usando tabla-por-subclase herencia mapeo .

El usuario entonces tendría una relación de muchos a muchos con contacto, y la recolección de contactos del usuario contendría contactos de cualquier tipo.

En lo personal me pondría a todos los tipos de contacto en una mesa y usar el mapeo simple tabla-por-clase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top