1

我有以下情况:

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 的 fluent API 来指定电话号码和人员之间的外键位于存储在名为 ContactId 的字段中的电话号码表中吗?

谢谢

4

1 回答 1

1

是的,这是可能的。在ContactConfiguration构造函数中添加映射:

HasMany(contact => contact.PhoneNumbers)
    .WithRequired()
    .Map(map => map.MapKey("ContactId"));
于 2012-08-09T15:10:20.120 回答