어떻게 이러한 기존 테이블을 아래 클래스에 매핑합니까? 연락과 일대일 관계에있는Fluent NHibernate를 사용하여 일대일 부모 - 자식 테이블을 클래스로 축소하는 방법?
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
)
표 전자, 전화 및 우편 :
나는 다음과 같은 테이블이있다. UserContact 테이블은 Contact와 다 대일 관계에 있습니다. UserContact는 User와 Contact 사이의 연관 테이블입니다.
또한 다음과 같은 클래스있다 : 그래서
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; } }
}
, 나는 내가 세 가지 클래스에 이르기까지 네 연락 테이블 (부모와 자식)에서받을 수 있나요? 그리고이 세 클래스를 UserContact 테이블에 매핑하는 방법은 무엇입니까? 나는 각 클래스에 대해 하나씩 3 명의 ILists를 가질 수 있다고 가정합니다.
수정. 세 개의 하위 테이블은 데이터베이스에서 상위 Contact 테이블을 확장합니다. 연락처 테이블을 보이지 않게 만들고 자식 독립 클래스를 만들어서 중간 계층을 단순하게 유지하려고 노력한 것 같습니다. 나는 돌아가서 당신이 제안한 것처럼 할 수도 있지만, 내 마음을 바꾸지 않는다고 가정하면 위의 것이 가능합니까? 그렇다면 어떻게? – alphadogg
당신이하려고하는 것은 상속을 사용하는 것보다 훨씬 더 복잡합니다. 특히 테이블 당 클래스 매핑을 사용하는 경우 더욱 그렇습니다. 상속을 사용하면 매핑을 제외하고 여전히 연락처 테이블이 보이지 않습니다. 마음이 바뀌지 않으면 세 가지 연락처 유형에 대한보기를 사용하는 것이 좋습니다. –
나는 당신이 권장했던대로 해왔다. 변경해야하는지 알 수 있습니다. 일찍 일을 복잡하게 할 필요가 없습니다. – alphadogg