代码优先实体框架添加对象
本文关键字:添加 对象 框架 实体 代码 | 更新日期: 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
包中。如果你能给我们看代码,人们可以更快地帮助你。