C# 子集合和根集合之间的映射
我正在尝试为遗留数据库创建EF CodeFirst映射 假设我上了以下课程: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 (
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相同的字段。