表拆分/可选关系

时间:2015-07-02 14:03:32

标签: entity-framework

目前,我的代码中包含以下内容:

modelBuilder.Entity<Client>().HasRequired(e => e.Logo).WithRequiredPrincipal();

此关系定义用于将Logo列(VARBINARY(MAX))拆分为单独的实体的表。一切都按预期工作。

我选择在数据库中使Logo列可以为空。我尝试将上面列出的代码更新为:

modelBuilder.Entity<Client>().HasOptional(e => e.Logo).WithOptionalPrincipal();

当我运行代码时,收到以下消息:

附加信息:实体类型'ClientLogo'和'Client'不能共享表'clients',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键。

问题是我不完全确定这条消息试图告诉我什么。当Logo列不可为空时,为什么它可以工作,但当它不可为空时它不起作用?我是否错误地映射了这段关系?

1 个答案:

答案 0 :(得分:1)

即使Logo列是可选的,ClientLogoClient之间的实体关系也需要保持不变,属性本身需要可以为空:

// This should stay the same
modelBuilder.Entity<Client>().HasRequired(e => e.Logo).WithRequiredPrincipal();

// If you used to have a line like this or a [Required] attribute, then it needs to be removed
// modelBuilder.Entity<ClientLogo>().Property(t => t.Logo).IsRequired();