0

我正在使用 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

但我希望这些功能在两个计划中都可用。

请帮助伙计们。

4

1 回答 1

0

在这种情况下,我猜您将在计划中拥有一系列功能,如下所示

public class Plan
{
     public List<Features> PlanFeatures {get;set;}
     // other properties go here...
}

在这种情况下,我想知道您是否在第一个计划中将功能设置为空,然后更新新计划。在上面的示例中,它将PlanFeatures为计划设置为 null Basic,然后将它们添加到Premium包中。如果您可以向我们展示代码,人们可以更快地帮助您。

于 2013-05-08T06:16:48.437 回答