目前,我的代码中包含以下内容:
modelBuilder.Entity<Client>().HasRequired(e => e.Logo).WithRequiredPrincipal();
此关系定义用于将Logo列(VARBINARY(MAX))拆分为单独的实体的表。一切都按预期工作。
我选择在数据库中使Logo列可以为空。我尝试将上面列出的代码更新为:
modelBuilder.Entity<Client>().HasOptional(e => e.Logo).WithOptionalPrincipal();
当我运行代码时,收到以下消息:
附加信息:实体类型'ClientLogo'和'Client'不能共享表'clients',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键。
问题是我不完全确定这条消息试图告诉我什么。当Logo列不可为空时,为什么它可以工作,但当它不可为空时它不起作用?我是否错误地映射了这段关系?
答案 0 :(得分:1)
即使Logo
列是可选的,ClientLogo
和Client
之间的实体关系也需要保持不变,属性本身需要可以为空:
// 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();