EF 4.3与最小导航属性的一对多关系

时间:2012-08-09 14:59:44

标签: c# entity-framework-4

我有以下情况:

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 个答案:

答案 0 :(得分:1)

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

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