Entity Framework CTP5, сначала код.Необязательное свойство навигации - PullRequest
6 голосов
/ 30 декабря 2010

Я использую Entity Framework CTP5 (сначала код) и у меня есть два класса:

public class Order
{
   public int Id {get;set;}
   public decimal SomeOtherProperty1 {get;set;}

   //navigation property
   public virtual ICollection<OrderLine> OrderLines { get; set; }  
}

и

public class OrderLine
{
   public int Id {get;set;}
   public int OrderId {get;set;}
   public decimal SomeOtherProperty2 {get;set;}

   //navigation property
   public virtual Order Order { get; set; }
}

И у меня есть следующий класс конфигурации для класса OrderLine:

public partial class OrderLineMap : EntityTypeConfiguration<OrderLine>
    {
        public OrderLineMap()
        {
            this.HasKey(ol=> ol.Id);

            this.HasRequired(ol=> ol.Order)
                .WithMany(o => o.OrderLines)
                .HasForeignKey(ol=> ol.OrderId);

        }
    }

В настоящее время, если вы создаете экземпляр 'OrderLine', вы должны указать экземпляр 'Order'.

Вопрос: как сделать свойство ol.Order необязательным (в некоторых случаях пустым)? Является ли это возможным?

Ответы [ 2 ]

6 голосов
/ 01 января 2011

Причина, по которой заказ теперь требуется для OrderLine, заключается в том, что вы использовали HasRequired() в своем свободном коде API для настройки связи. Нам просто нужно изменить это значение на HasOptional, как показано в следующем коде:

this.HasOptional(ol => ol.Order)
    .WithMany(o => o.OrderLines)
    .HasForeignKey(ol => ol.OrderId);

Это в основном сделает столбец OrderLines.OrderId как (INT, NULL) в БД, чтобы записи OrderLine были независимыми. Нам также необходимо отразить это изменение в объектной модели, сделав OrderId обнуляемым в классе OrderLine:

public class OrderLine
{
    public int Id { get; set; }
    public int? OrderId { get; set; }
    public decimal SomeOtherProperty2 { get; set; }

    public virtual Order Order { get; set; }
}

Теперь вы можете сохранять Строки заказа, не указывая для них Заказ.

2 голосов
/ 30 декабря 2010

Не знаю, почему вы хотите это сделать ... но вы можете просто изменить

 this.HasRequired(ol=> ol.Order)
      .WithMany(o => o.OrderLines)
      .HasForeignKey(ol=> ol.OrderId);

на

 this.HasOptional(ol => ol.Order);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...