我有两个实体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();
这是我遇到的一个特殊问题。运行此代码时,它不会删除两者之间的关系。
实际代码:
正如您所看到的,即使执行= null;
之后,它仍然存在。
答案 0 :(得分:0)
我认为您的select语句可能需要:
transaction.DiscountType =
context.DiscountTypes.Where(d => d.DiscountTypeID == 1).SingleOrDefault();
答案 1 :(得分:0)
我认为你最好在创建DbContext
:
modelBuilder.Entity<Transaction>()
.HasOptional(x => x.DiscountType)
.WithOptionalPrincipal();
这会在Transaction中为DiscountType创建一个可以为空的外键,我认为它允许您将其设置为null
。
(就我个人而言,我认为这是一种更好的方式,因为语义上对于“拥有”交易的类型来说似乎很奇怪,但是具有类型的交易是很正常的。)