Frage

Wie ordne ich diese vorhandenen Tabellen zu den unten angegebenen Klassen?

Ich habe die folgenden Tabellen:

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
)

Die Tabellen Electronic, Telefon und Post ist in einer Eins-zu-Eins-Beziehung mit Kontakt. Die Tabelle UserContact ist in eine viele-zu-eins mit Kontakt; UserContact ist eine Zuordnungstabelle zwischen User und Kontakt.

ich auch die folgenden Klassen:

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

Also, ich komme ich von den vier Kontakttabellen (Eltern und Kind) bis hinunter zu den drei Klassen? Und, wie ordne ich diese drei Klassen der UserContact Tabelle. Ich gehe davon aus ich drei ILists haben kann, eine für jede Klasse.

War es hilfreich?

Lösung

Ich glaube, du Modellierung dieses falsch. Es scheint mir, dass Electronic, Telefon und Post verlängert (vererben) Kontakt und dies sollte in Ihrem Domain-Modell ausgedrückt werden. Diese Klassen sind nicht im Zusammenhang mit Kontakt durch eine Eins-zu-eins, sie sind konkrete Typen, die den abstrakten Kontakttyp erweitern. Wenn Sie es auf diese Weise modellieren können Sie map Kontakt mit Tabelle pro Unterklasse Vererbung Mapping .

Benutzer hätten dann eine many-to-many-Beziehung mit Kontakt und die Kontakte Sammlung des Benutzers würde Kontakte jeglicher Art enthalten.

Persönlich würde ich alle Kontakttypen in einer Tabelle setzen und verwenden die einfachere Tabelle pro Klasse Zuordnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top