C# 子集合和根集合之间的映射

C# 子集合和根集合之间的映射,c#,ef-code-first,entity-framework-6,C#,Ef Code First,Entity Framework 6,我正在尝试为遗留数据库创建EF CodeFirst映射 假设我上了以下课程: public class Subscriber { public Guid Id { get; set; } public SubscriberAddress Address { get; set; } } public class SubscriberAddress { //[...] } 我想配置它们之间的映射。这些表如下所示: create table Subscriber (

我正在尝试为遗留数据库创建EF CodeFirst映射

假设我上了以下课程:

public class Subscriber
{
    public Guid Id { get; set; }
    public SubscriberAddress Address { get; set; }
}

public class SubscriberAddress
{
    //[...]
}
我想配置它们之间的映射。这些表如下所示:

create table Subscriber
(
    Id uniqueidentifier primary key,
    -- [...]
)

create table SubscriberAddress
(
    SubscriberId uniqueidentifier,
    -- [...]
)
因此,关系在
SubscriberAddress
表中,但在类中,我希望地址是
Subscriber
类中的一个属性

我尝试了使用
和requiredPrincipal
以及
和requiredDependent
进行映射,但无法理解如何进行映射,因为FK位于另一个表中

编辑


SubscriberAddress
没有引用
Subscriber
Subscriber的属性。Address
是可选的。

假设它是1对1的关系,并且两者都是必需的,这应该可以工作

public class SubscriberContext : DbContext
{
    public DbSet<Subscriber> Subscribers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //modelBuilder.Entity<Subscriber>().HasRequired(x => x.Address).WithRequiredPrincipal(x => x.Subscriber);
        modelBuilder.Entity<Subscriber>().HasOptional(x => x.Address).WithRequired(x => x.Subscriber);
        modelBuilder.Entity<SubscriberAddress>().Property(x => x.Id).HasColumnName("SubscriberId");
        base.OnModelCreating(modelBuilder);
    }
}

public class Subscriber
{
    public Guid Id { get; set; }
    public virtual SubscriberAddress Address { get; set; }
}

public class SubscriberAddress
{
    public Guid Id { get; set; }
    public virtual Subscriber Subscriber { get; set; }
}
公共类SubscriberContext:DbContext
{
公共数据库集订阅服务器{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
//modelBuilder.Entity().HasRequired(x=>x.Address)。WithRequiredPrincipal(x=>x.Subscriber);
modelBuilder.Entity();
modelBuilder.Entity().Property(x=>x.Id).HasColumnName(“SubscriberId”);
基于模型创建(modelBuilder);
}
}
公共类订户
{
公共Guid Id{get;set;}
公共虚拟订阅地址{get;set;}
}
公共类订阅地址
{
公共Guid Id{get;set;}
公共虚拟订户订户{get;set;}
}

您想要什么类型的映射?1对1或1对多。订阅服务器的地址是可选的还是必需的?这是一对一的映射,订阅服务器的地址是可选的。@jgauffin更新了我的答案以反映问题中的更改。添加到subscriberaddress的订阅服务器只是poco类上的导航属性,本身并不表示数据库中的列。上述实现将SubscriberAddress类的“Id”属性映射到表上的底层subscriberId,并使用与表上的PK和订阅服务器上的FK相同的字段。