2012-08-09 152 views
1

我有以下情形:EF 4.3一對多的關係以最小的導航屬性

public class Person 
{ 
    public string Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public ICollection<PhoneNumber> PhoneNumbers { get; set; } 
} 

public class PhoneNumber 
{ 
    public int Id { get; set; } 
    public string Number { get; set; } 
    public string Type { get; set; } 
} 

這應該與數據庫中的一個模式,看起來像這樣:

CREATE TABLE [dbo].[Contacts] 
(
    [ContactId]   NVARCHAR(50) NOT NULL, 
    [FirstName]   NVARCHAR(150) NOT NULL, 
    [LastName]   NVARCHAR(150) NOT NULL 
) 

CREATE TABLE [dbo].[PhoneNumbers] 
(
    [PhoneNumberId]  INT IDENTITY(1,1) NOT NULL, 
    [ContactId]   NVARCHAR(50)  NOT NULL, 
    [PhoneNumber]  NVARCHAR(20)  NOT NULL, 
    [Type]    NVARCHAR(1000)  NOT NULL 
) 

而且我有兩個實現EntityTypeConfiguration的類。

public class PhoneNumberConfiguration : EntityTypeConfiguration<PhoneNumber> 
{ 
    public PhoneNumberConfiguration() 
    { 
     ToTable(TableName); 

     Property(e => e.Id).HasColumnName("PhoneNumberId"); 
     Property(e => e.Value).HasColumnName("PhoneNumber"); 
     Property(e => e.PhoneType).HasColumnName("Type"); 
    } 
} 

public class ContactConfiguration : EntityTypeConfiguration<Person> 
{ 
    public ContactConfiguration() 
    { 
     ToTable("Contacts"); 

     Property(contact => contact.Id) 
      .HasColumnName("ContactId"); 
    } 
} 

從這個,我可以使用EF 4.3的流暢API指定的電話號碼和個人之間的外鍵是存儲在一個名爲的ContactID字段的電話號碼錶?

謝謝

回答

1

是的,這是可能的。在ContactConfiguration構造函數中添加映射:

HasMany(contact => contact.PhoneNumbers) 
    .WithRequired() 
    .Map(map => map.MapKey("ContactId"));