HasRequired的奇怪行为

时间:2015-09-23 13:43:44

标签: c# entity-framework entity-framework-6 entity-framework-mapping

HasRequired州的帮助

  

从此实体类型配置所需的关系。                    除非指定了此关系,否则无法将实体类型的实例保存到数据库。                    数据库中的外键将是不可为空的。

我有一个非必需字段配置为

public class BookingConfiguration : EntityTypeConfiguration<Booking>
    {
        public BookingConfiguration()
        {
            HasKey(ai => ai.BookingKey);

            ...

            HasRequired(b => b.Customer)
                .WithRequiredPrincipal();

            ToTable("Booking");
        }
    }

这是非常奇怪的,因为不需要客户。但是,它可以工作:D两者都为空值和客户设置时。如果我改为

HasOptional(b => b.Customer)
    .WithOptionalPrincipal();

它失败了(已经从数据库获取)

  

无效的列名'Booking_BookingKey'。

失败的代码

var existingBooking = await _context.DbSet<Booking>().FirstAsync(ai => ai.BookingKey == confirmCommand.BookingKey);

编辑:实体结构

public class Booking
{
   public Guid BookingKey { get; set; }
   ...
   public Customer Customer { get; set; }
}

public class Customer
{
   public Guid BookingKey { get; set; }
   ...   
}

1 个答案:

答案 0 :(得分:0)

由于BookingKey既是预订的钥匙,也是客户的ForeignKey,尝试在安装过程中设置ForeignKey字段。

HasOptional(c => c.Customer)
     .WithOptionalPrincipal()
     .Map(m => m.MapKey("BookingKey"));