C# ASP.NET在添加到多行时复制条目
我正在尝试将同一条目添加到多行。C# ASP.NET在添加到多行时复制条目,c#,asp.net-web-api,C#,Asp.net Web Api,我正在尝试将同一条目添加到多行。 我的项目包含表存储和表标记。这是一种多对多的关系;每个商店可以包含多个标签,每个标签可以与多个商店相关。 Store.cs: public class Store{ public int Id { get; set; } public virtual ICollection<Tag> Tags { get; set; } } 标签单独发布,然后与PUT请求中的存储相关 StoreController.cs: public class T
我的项目包含表存储和表标记。这是一种多对多的关系;每个商店可以包含多个标签,每个标签可以与多个商店相关。
Store.cs:
public class Store{
public int Id { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
标签单独发布,然后与PUT请求中的存储相关
StoreController.cs:
public class Tag{
public int Id { get; set; }
public string Name { get; set; }
}
public async Task<IHttpActionResult> PutStore(int id, StoreViewModel model){
var store = await db.Stores.FindAsync(id);
if (model.tags != null)
{
foreach (var modelTag in model.tags)
{
var databaseTag = db.Tags.FirstOrDefault(c => c.Name == modelTag.Name);
if (databaseTag == null)
store.Tags.Add(new Tag()
{
Name = modelTag.Name
});
else
if (!store.Tags.Any(sc => sc.Name == modelTag.Name))
store.Tags.Add(databaseTag);
}
foreach (var storeTag in store.Tags.ToList())
if (!model.tags.Any(s => s.Name == storeTag.Name))
store.Tags.Remove(storeTag);
}
}
公共异步任务PutStore(int-id,StoreViewModel-model){
var store=await db.Stores.FindAsync(id);
如果(model.tags!=null)
{
foreach(model.tags中的var modelTag)
{
var-databaseTag=db.Tags.FirstOrDefault(c=>c.Name==modelTag.Name);
if(databaseTag==null)
store.Tags.Add(新标签()
{
Name=modelTag.Name
});
其他的
如果(!store.Tags.Any(sc=>sc.Name==modelTag.Name))
store.Tags.Add(databaseTag);
}
foreach(store.Tags.ToList()中的var storeTag)
如果(!model.tags.Any(s=>s.Name==storeTag.Name))
store.Tags.Remove(storeTag);
}
}
StoreViewModel包含一组标记。那么,为什么标签被复制而不是链接到不同的商店?
提前感谢。在第二次致电PutStore之前,您是否确实更新了数据库?当同时从不同线程调用PutStore时,还有一个争用条件。是的,我调用
db.Entry(store.State=EntityState.Modified;等待db.saveChangesSync()代码>