0

我有一个有点棘手的问题要问,但我会尽力而为。

我有两节课:

  • 博文
  • 博客标签

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 表中,然后,在需要时拆分,但这似乎并不干净。

任何建议将不胜感激

4

1 回答 1

1

您不能将对象传递给存储过程,因为您的 SQL 引擎不知道那是什么。您可以将 XML 字符串传递给它并对其进行操作。如果您将对象设置为可序列化,则可以将其序列化为 xml 字符串并将其传入。它基本上是对象的 XML 表示。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

于 2013-05-01T14:37:58.760 回答