代码优先实体框架添加对象

本文关键字:添加 对象 框架 实体 代码 | 更新日期: 2023-09-27 18:12:50

我正在与代码第一实体框架工作,我被困在一个地方,我需要添加一个功能列表到一个对象。

的例子:

我有以下聚合。

1) Plan.cs

2) Feature.cs

现在我可以用计划Agg创建一个计划,并将这些功能分配给计划。

但是当我创建一个新计划并分配相同的特征时,那么第一个计划中的特征被删除并分配给第二个计划。

计划=基本套餐,高级套餐

功能=上传,删除,创建,更新

现在,如果我把所有的功能分配给基本包,即上传,删除,创建和更新。它工作得很好,但是当我将删除和创建分配给高级包时…它被分配给高级包,但那些删除和创建从基本包中删除。

很抱歉,因为我无法正确地解释我的情况。

任何帮助都将非常感激。

编辑:更新代码:

gg:

   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

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

请大家帮帮我

代码优先实体框架添加对象

在这种情况下,我猜您将在计划中拥有如下所示的功能集合

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

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