我正在使用asp.net mvc,ef6處理問題/答案軟件。我試圖解決的問題之一是插入/更新許多項目。例如,如果用戶提出問題並添加標籤,他們可以選擇現有標籤或創建新標籤。實體框架6多對多插入更新
我剝離下來的問題類是
public class Question
{
private ICollection<Tag> _tags;
public long Id { get; set; }
public string Body { get; set; }
public virtual ICollection<Tag> Tags
{
get { return _tags ?? (_tags = new Collection<Tag>()); }
set { _tags = value; }
}
}
我的標籤類就像
public class Tag
{
private ICollection<Question> _questions;
public long Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Question> Questions
{
get { return _questions?? (_questions=new Collection<Question>()); }
set { _questions = value; }
}
}
我的背景是像
public class MyDbContext
: DbContext
{
public virtual DbSet<Tag> Tags { get; set; }
public virtual DbSet<Question> Questions { get; set; }
}
當我需要保存的問題標籤我必須手動檢查用戶是否添加了標籤問題是否存在。如果它們不存在,我創建它們並保存上下文,然後返回標籤並將它們添加到問題中。我想知道是否有更好的方法在EF6中做這樣的事情?
我的示例代碼如下
public IEnumerable<Tag> CreateOrRetrieveTags(IList<string> tags)
{
List<string> availableTags = (from t in _context.Tags
where tags.Contains(t.Text)
select t.Text).ToList();
var missingTags = tags.Except(availableTags, StringComparer.OrdinalIgnoreCase);
foreach (string missingTag in missingTags)
{
_context.Tags.Add(new Tag
{
Text = missingTag
});
}
_context.SaveChanges();
return from t in _context.Tags
where tags.Contains(t.Text)
select t;
}
但是在那個階段我沒有完整的標籤。有點像Stackoverflow時,用戶添加標籤問題我只有標籤字符串/文本。 – 2014-09-29 18:48:03
@QaiserIftikhar你不需要完整的標籤。如果是新標籤,你可以在javascript中創建一個標籤對象,默認爲零。 – 2014-09-29 18:49:47
對不起,不知道你的意思。我從用戶那裏得到的是一個帶有特定字段的表單,例如問題主體,標題,標籤。我收到的標籤文本類似於wpf,c#,mvc,java。我用逗號分隔標籤文本,然後根據文本詢問我的上下文以查看數據庫中的標籤。在那個階段,我如何創建一個完整的標籤而不是首先檢索與用戶輸入的標籤匹配的標籤列表? – 2014-09-29 18:54:44