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を実装する2つのクラスもあります。

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というフィールドに格納されている電話番号テーブルにあることを指定できますか?

ありがとう

4

1 に答える 1

1

はい、可能です。コンストラクターでContactConfigurationマッピングを追加します。

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