我正在使用 Code First Entity Framework,我被困在一个需要向一个对象添加功能列表的地方。
例子 :
我有以下聚合。
1) 计划.cs
2) 特征.cs
现在我可以使用 Plan Agg 创建一个计划并将这些功能分配给该计划。
但是当我创建一个新计划并分配相同的功能时,第一个计划中的功能将被删除并分配给第二个计划。
计划 = 基本套餐,高级套餐
特征 = 上传、删除、创建、更新。
现在,如果我将所有功能分配给基本包,即上传、删除、创建和更新。它工作正常,但是当我将删除和创建分配给高级包时..它被分配给高级包但那些删除和创建从基本包中删除。
抱歉,因为我无法正确解释我的情况。
任何帮助都感激不尽。
编辑:更新代码:
聚合:
public class Plan:Entity
{
// other properties ...
public virtual List<Features> PlanFeatures {get;set;}
// other properties go here...
}
.. 将功能分配给计划的功能。
// ids of features to be assigned
// var FeatureIds = List<int>{1,2,3};
// Get the Plan with the Plan Id.
var plan = _planRepository.Get(planId);
// Get the Service with Service Id.
Service service = _serviceRepository.Get(serviceId);
// Get the Features for the passed FeatureIds.
var features = service.Features.FindAll(x => FeatureIds.Contains(x.FeatureId));
//We will begin a transaction for the subscription process
using (var transactionScope = new TransactionScope())
{
// Add the List<Feature> to Plan.
Plan.Features.AddRange(features);
//Save changes
_planRepository.UnitOfWork.Commit();
transactionScope.Complete();
}
编辑 2:
我刚刚注意到,在“功能”的数据库表中,我有外键“Plan_PlanId”
现在,当我将功能分配给基本包时:功能表更新如下:
FeatureId FeatureName Plan_PlanId
1 -------- 创建 -------- 1
2 -------- 删除 -------- 1
3 -------- 更新 -------- 1
现在,当我将这些功能分配给高级包时:我只将 2 个功能分配给高级包。
FeatureId FeatureName Plan_PlanId
1 -------- 创建 -------- 1
2 -------- 删除 -------- 2
3 -------- 更新 -------- 2
但我希望这些功能在两个计划中都可用。
请帮助伙计们。