Question

Comment puis-je mapper ces tables existantes aux classes ci-dessous?

Je les tableaux suivants:

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
)

Les tableaux électroniques, téléphone et des postes sont en tête-à-un avec contact. Le tableau UserContact est dans un grand nombre à un avec contact; UserContact est une table d'association entre l'utilisateur et Contact.

J'ai aussi les classes suivantes:

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; } }
}

Alors, je dois-je obtenir des quatre tables de contact (parents et enfants) vers le bas aux trois classes? Et, comment associer ces trois classes à la table de UserContact. Je suppose que je peux avoir trois ILists, un pour chaque classe.

Était-ce utile?

La solution

Je pense que vous êtes la modélisation de ce mal. Il me semble que électronique, téléphone et étendre Postal (Hériter) Contact et cela devrait être exprimé dans votre modèle de domaine. Ces classes ne sont pas liés à un contact par un à un, ils sont des types de béton qui étendent le type abstrait de contact. Si vous le modèle de cette façon vous pouvez mapper contacter en utilisant table par sous-classe héritage mapping .

L'utilisateur aurait alors un grand nombre à plusieurs de relations avec contact, et contiendrait de l'utilisateur collection Contacts Contacts de tout type.

Personnellement, je mettrais tous les types de contacts dans une table et utiliser la simple table par mapping class.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top