C# 如何使用代码优先迁移更新关系表
我的技术问题非常简短:如何更新使用代码第一次迁移时创建的关系表 这里的表StockKeepingUnitFeature是自动创建的,但我没有任何对象类来更新该表。我们怎么办C# 如何使用代码优先迁移更新关系表,c#,entity-framework-migrations,C#,Entity Framework Migrations,我的技术问题非常简短:如何更新使用代码第一次迁移时创建的关系表 这里的表StockKeepingUnitFeature是自动创建的,但我没有任何对象类来更新该表。我们怎么办 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Entity<StockKeepingUnit>()
.HasMany(b => b.Feature)
.WithMany(a => a.StockKeepingUnit)
.Map(m => m.MapLeftKey("StockKeepingUnitId")
.MapRightKey("FeatureId")
.ToTable("StockKeepingUnitFeature"));
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Entity()
.HasMany(b=>b.Feature)
.WithMany(a=>a.StockKeepingUnit)
.Map(m=>m.MapLeftKey(“StockKeepingUnitId”)
.MapRightKey(“FeatureId”)
.ToTable(“StockKeepingUnitFeature”);
}
谢谢 这里是解决方案:我发现微软的链接非常有用 此后,这里是更新关系表的代码:
public IQueryable<TEntity> AllIncluding(params Expression<Func<TEntity, object>>[] includeProperties)
{
IQueryable<TEntity> query = context.Set<TEntity>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query;
}
/// <summary>
/// Update the relational StockKeepingUnitFeature table
/// </summary>
/// <param name="stockKeepingUnitSlug"></param>
/// <param name="featureSlug"></param>
/// <returns></returns>
public bool AddFeatureToStockKeepingUnit(string stockKeepingUnitSlug, string featureSlug)
{
StockKeepingUnit sku = this.AllIncluding(stockKeepingUnit => stockKeepingUnit.Feature).Where(s => s.Slug == stockKeepingUnitSlug).FirstOrDefault();
Feature feature = context.Features.FirstOrDefault(f => f.Slug == featureSlug);
if (feature != null && sku != null)
{
sku.Feature.Add(feature);
context.StockKeepingUnits.Attach(sku);
context.SaveChanges();
return true;
}
return false;
}
/// <summary>
/// Update the relational StockKeepingUnitFeature database
/// </summary>
/// <param name="stockKeepingUnitSlug"></param>
/// <param name="featureSlug"></param>
/// <returns></returns>
public bool RemoveFeatureFromStockKeepingUnit(string stockKeepingUnitSlug, string featureSlug)
{
StockKeepingUnit sku = this.AllIncluding(stockKeepingUnit => stockKeepingUnit.Feature).Where(s => s.Slug == stockKeepingUnitSlug).FirstOrDefault();
Feature feature = context.Features.FirstOrDefault(f => f.Slug == featureSlug);
if (feature != null && sku != null)
{
context.Entry(feature).Collection(s => s.StockKeepingUnit).CurrentValue = null;
context.SaveChanges();
return true;
}
return false;
}
public可查询全部包含(参数表达式[]包含属性)
{
IQueryable query=context.Set();
foreach(includeProperty中的var includeProperty)
{
query=query.Include(includeProperty);
}
返回查询;
}
///
///更新关系StockKeepingUnitFeature表
///
///
///
///
public bool AddFeatureToStockKeepingUnit(字符串stockKeepingUnitSlug,字符串featureSlug)
{
StockKeepingUnit sku=this.AllIncluding(StockKeepingUnit=>StockKeepingUnit.Feature)。其中(s=>s.Slug==stockKeepingUnitSlug)。FirstOrDefault();
Feature Feature=context.Features.FirstOrDefault(f=>f.Slug==featureSlug);
如果(功能!=null&&sku!=null)
{
sku.Feature.Add(特征);
context.StockKeepingUnits.Attach(sku);
SaveChanges();
返回true;
}
返回false;
}
///
///更新关系StockKeepingUnitFeature数据库
///
///
///
///
public bool从StockKeepingUnit中删除功能(字符串stockKeepingUnitSlug,字符串功能Slug)
{
StockKeepingUnit sku=this.AllIncluding(StockKeepingUnit=>StockKeepingUnit.Feature)。其中(s=>s.Slug==stockKeepingUnitSlug)。FirstOrDefault();
Feature Feature=context.Features.FirstOrDefault(f=>f.Slug==featureSlug);
如果(功能!=null&&sku!=null)
{
context.Entry(feature).Collection(s=>s.StockKeepingUnit).CurrentValue=null;
SaveChanges();
返回true;
}
返回false;
}
希望对社会有用,
干杯