Entity Framework Отношение «один ко многим» - PullRequest
0 голосов
/ 09 марта 2012

У меня есть две сущности Transaction и DiscountType

Сделка:

public class Transaction
{
    [Key]
    public int TransactionID { get; set; }
    public virtual DiscountType DiscountType { get; set; }
}

DiscountType:

public class DiscountType
{
    [Key]
    public int DiscountTypeID { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
    public float DiscountValue { get; set; }
    public bool Enabled {get; set;}
}

Семейное положение:

 modelBuilder.Entity<DiscountType>().HasMany(d => d.Transactions);

Цель:

Я пытаюсь удалить связь между Transaction и DiscountType, фактически не удаляя ни одну из сущностей.

Проблема:

Теперь у меня нет проблем с назначением скидки транзакции, но когда я делаю следующее:

 var transaction = context.Transactions.Where(t => t.TransactionID == 1).First();
 transaction.DiscountType = context.DiscountTypes.Where(d => d.DiscountTypeID == 1).First();
 context.SaveChanges();


 var _transaction = context.Transactions.Where(t => t.TransactionID == 1).First();
 _transaction.DiscountType = null;
 context.SaveChanges();

У меня довольно специфическая проблема. Когда этот код запускается, он не удаляет связь между ними.

Фактический код:

image= null; is executed, it still remains.">

Как видите, даже после выполнения = null; оно все равно остается.

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Я думаю, вам лучше перевернуть отношения при создании DbContext:

modelBuilder.Entity<Transaction>()
    .HasOptional(x => x.DiscountType)
    .WithOptionalPrincipal();

Это создает обнуляемый внешний ключ для DiscountType в транзакции, и я думаю, что это позволит вам установить его на null.

(Лично я думаю, что это лучший способ выразить это, потому что семантически кажется странным, что тип "имеет" Транзакции, но Транзакция с типом вполне нормальна.)

0 голосов
/ 09 марта 2012

Я думаю, что ваше утверждение выбора может быть:

transaction.DiscountType = 
  context.DiscountTypes.Where(d => d.DiscountTypeID == 1).SingleOrDefault();
...