我有一个有点棘手的问题要问,但我会尽力而为。
我有两节课:
- 博文
- 博客标签
BlogPost
有一个公共属性HashSet<BlogTag> Tags
,一个博客标签的集合,够简单。我想要实现的是在BlogPost
我的表 dbo.BlogPost 中添加一个新的,然后遍历标签的 HashSet 并更新一个单独的表 dbo.BlogTags,例如使用集合中的每个标签和发布它的 ID属于。
我会使用类似的东西来做到这一点: -
public static void AddPost(BlogPost post)
{
try
{
Database db = DatabaseFactory.CreateDatabase(Constants.Application.DatabaseName);
DbCommand cmd = db.GetStoredProcCommand("stp_BlogPost_Add");
db.AddInParameter(cmd, "post_title", DbType.String, post.Title);
db.AddInParameter(cmd, "author", DbType.String, post.Author);
db.AddInParameter(cmd, "date_created", DbType.DateTime, DateTime.Now);
db.AddInParameter(cmd, "post_content", DbType.String, post.Content);
//Snip...
//Insert tags
foreach(BlogTag tag in post.Tags)
{
AddNewTags(post.ID, tag.TagText);
}
db.ExecuteNonQuery(cmd);
}
catch (Exception ex)
{
Logging.LogError(ex);
throw;
}
}
但是,我似乎无法解决的问题是:
foreach(BlogTag tag in post.Tags)
{
AddNewTags(post.ID, tag.TagText);
}
上面的方法只有在我们有post.ID
值时才有效,但是,由于这是在AddPost
方法中运行的,所以此时 ID 仍将是默认0
值(记录的 ID 是表中的 PK 并设置为自动递增。
有没有办法HashSet<BlogTags>
直接将参数作为参数传递给存储过程(值得一提的是,我是一个 SQL 新手),然后一旦stp_BlogPost_Add
过程运行,获取新创建的帖子的 id 并将值插入BlogTags 表?
或者,除了上述方法之外,是否有一种首选方法可以实现我想做的事情?我曾考虑将标签作为逗号分隔的字符串简单地存储在 BlogPost 表中,然后,
在需要时拆分,但这似乎并不干净。
任何建议将不胜感激