{"id":159849,"date":"2012-12-03T20:34:02","date_gmt":"2012-12-03T16:34:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=159849"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=159849","title":{"rendered":"<span class=\"post_title\">\u0421\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u0435\u043c T4 \u0438 SQL<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0414\u0443\u043c\u0430\u044e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445) \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445. \u042f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0441 \u0412\u0430\u043c\u0438 \u043a\u0430\u043a \u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e T4. <br \/>  \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 SQL \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<pre><code class=\"sql\">SET IDENTITY_INSERT dbo.Config ON INSERT INTO dbo.Config(ID, ColorId, CategoryId, Name) VALUES(2, 2, 4, N'\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441') SET IDENTITY_INSERT dbo.Config OFF  INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 2, 4) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 1, 1) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 3, 3) <\/code><\/pre>\n<p>  \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 C#:<\/p>\n<pre><code>var config = new ConfigTable(); config.Color = &quot;Green&quot;; config.Category = &quot;Bus&quot;; config.Name = &quot;\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441&quot;; config.Id = 2;  config.Details.Add(&quot;Wheel&quot;, 4); config.Details.Add(&quot;Engine&quot;, 1); config.Details.Add(&quot;Door&quot;, 3); <\/code><\/pre>\n<p>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/62b\/3b6\/20b\/62b3b620b5ddcd3f55f5fccfe929592a.png\"\/><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"sql\">CREATE TABLE dbo.Color (  \tID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, \tName NVARCHAR(20) NOT NULL )  CREATE TABLE dbo.Category ( \tID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, \tName NVARCHAR(20) NOT NULL )  CREATE TABLE dbo.Detail( \tID int IDENTITY(1,1) NOT NULL PRIMARY KEY, \tName NVARCHAR(20) NOT NULL )  CREATE TABLE dbo.Config( \tID int IDENTITY(1,1) NOT NULL PRIMARY KEY, \tName] nvarchar(20) NOT NULL, \tColorID int NOT NULL, \tCategoryID int NOT NULL, ) GO  ALTER TABLE dbo.Config  WITH CHECK ADD  CONSTRAINT FK_Config_Category FOREIGN KEY(CategoryID) REFERENCES dbo.Category(ID) GO  ALTER TABLE dbo.Config  WITH CHECK ADD  CONSTRAINT FK_Config_Color FOREIGN KEY(ColorID) REFERENCES dbo.Color (ID) GO  CREATE TABLE dbo.CarDetail( \tID int IDENTITY(1,1) NOT NULL PRIMARY KEY, \tConfigID int NOT NULL, \tDetailID int NOT NULL, \tCount int NOT NULL) GO  ALTER TABLE dbo.CarDetail  WITH CHECK ADD  CONSTRAINT FK_CarDetail2Config FOREIGN KEY(ConfigID) REFERENCES dbo.Config (ID) GO  ALTER TABLE dbo.CarDetail  WITH CHECK ADD  CONSTRAINT FK_CarDetail2Detail FOREIGN KEY(DetailID) REFERENCES dbo.Detail (ID) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0445\u043e\u0447\u0443 \u0412\u0430\u043c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446 Config \u0438 CarDetail. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 Color, Category, Detail \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e. \u041f\u0443\u0441\u0442\u044c \u0432 \u043d\u0438\u0445 \u043b\u0435\u0436\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/ba4\/e5c\/9a8\/ba4e5c9a827b39b74f9e1c395f8eb62b.jpg\"\/><br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c VS 2010\/2012, \u0441\u043e\u0437\u0434\u0430\u0435\u043c Solution &#8216;SqlT4&#8217;, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 &#8216;SqlTemplate&#8217;, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441 Tables.cs \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c:<\/p>\n<pre><code>namespace SqlTemplate {     public static class ColorTable     {         static ColorTable()         {             Dic = new Dictionary&lt;string, int&gt;                 {                     {&quot;Red&quot;, 1},{&quot;Green&quot;, 2},{&quot;Blue&quot;, 3},{&quot;Orange&quot;, 4}                 };         }          public static Dictionary&lt;string, int&gt; Dic { get; set; }     }      public static class CategoryTable     {         static CategoryTable()         {             Dic = new Dictionary&lt;string, int&gt;                 {                     {&quot;Bike&quot;, 1},{&quot;Car&quot;, 2},{&quot;Truck&quot;, 3},{&quot;Bus&quot;, 4}                 };         }          public static Dictionary&lt;string, int&gt; Dic { get; set; }     }      public static class DetailTable     {         static DetailTable()         {             Dic = new Dictionary&lt;string, int&gt;                 {                     {&quot;Engine&quot;, 1},{&quot;Wheel&quot;, 2},{&quot;Door&quot;, 3}                 };         }          public static Dictionary&lt;string, int&gt; Dic { get; set; }     } } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0435 \u0442\u0440\u0443\u0434\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 Color, Category, Detail. <br \/>  \u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 &#8216;SqlTemplate&#8217; \u0444\u0430\u0439\u043b &#8216;Config.cs&#8217; \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code>namespace SqlTemplate {     public class ConfigTable     {         public int Id { get; set; }          public string Name { get; set; }          public string Color { get; set; }          public string Category { get; set; }          public int ColorId         {             get { return ColorTable.Dic[Color]; }         }          public int CategoryId         {             get { return CategoryTable.Dic[Category]; }         }          private Dictionary&lt;string, int&gt; _details = new Dictionary&lt;string, int&gt;();         public Dictionary&lt;string, int&gt; Details         {             get { return _details; }         }          public Dictionary&lt;int, int&gt; DetailIdList         {             get             {                 return Details.ToDictionary(detail =&gt; DetailTable.Dic[detail.Key], detail =&gt; detail.Value);             }         }     } } <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Config.<br \/>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c Solution \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 &#8216;SqlT4&#8217;. \u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 &#8216;SqlTemplate&#8217;. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u0444\u0430\u0439\u043b &#8216;GreenBus.tt&#8217; \u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b T4. \u041f\u0443\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0443 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0438\u043c;<\/p>\n<pre><code class=\"sql\">&lt;#@ output extension=&quot;.sql&quot; #&gt; &lt;#@ Assembly name=&quot;$(SolutionDir)SqlT4\\bin\\Debug\\SqlTemplate.dll&quot;#&gt; &lt;#@ import namespace=&quot;System&quot; #&gt; &lt;#@ import namespace=&quot;SqlTemplate&quot; #&gt; &lt;# \tvar config = new ConfigTable(); \tconfig.Color = &quot;Green&quot;; \tconfig.Category = &quot;Bus&quot;; \tconfig.Name = &quot;\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441&quot;; \tconfig.Id = 2; \t \tconfig.Details.Add(&quot;Wheel&quot;, 4); \tconfig.Details.Add(&quot;Engine&quot;, 1); \tconfig.Details.Add(&quot;Door&quot;, 3); #&gt;  SET IDENTITY_INSERT dbo.Config ON  INSERT INTO dbo.Config(ID, ColorId, CategoryId, Name) VALUES(&lt;#= config.Id #&gt;, &lt;#= config.ColorId #&gt;, &lt;#= config.CategoryId #&gt;, N'&lt;#= config.Name #&gt;')  SET IDENTITY_INSERT dbo.Config OFF  &lt;#foreach (var dIter in config.DetailIdList){#&gt;  INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(&lt;#= config.Id #&gt;, &lt;#= dIter.Key #&gt;, &lt;#= dIter.Value #&gt;)  &lt;#}#&gt;  -- \u0421\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f  UPDATE dbo.Config SET Name = N'&lt;#= config.Name #&gt;' \t, ColorId = &lt;#= config.ColorId #&gt; \t, CategoryId =  &lt;#= config.CategoryId #&gt; WHERE ID = &lt;#= config.Id #&gt; <\/code><\/pre>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435:<\/p>\n<pre><code class=\"sql\"> SET IDENTITY_INSERT dbo.Config ON INSERT INTO dbo.Config(ID, ColorId, CategoryId, Name) VALUES(2, 2, 4, N'\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441') SET IDENTITY_INSERT dbo.Config OFF  INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 2, 4) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 1, 1) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 3, 3)  -- \u0421\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f UPDATE dbo.Config SET Name = N'\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441' \t, ColorId = 2 \t, CategoryId =  4 WHERE ID = 2 <\/code><\/pre>\n<p>  \u041f\u043b\u044e\u0441\u044b:  <\/p>\n<ol>\n<li>\u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0442\u0440\u0443\u0434\u043d\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u043e \u043c\u043d\u0435 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u0436\u0438\u0437\u043d\u044c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u043e \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e)<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435  <\/li>\n<\/ol>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/159849\/\"> http:\/\/habrahabr.ru\/post\/159849\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0414\u0443\u043c\u0430\u044e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0445) \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445. \u042f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0441 \u0412\u0430\u043c\u0438 \u043a\u0430\u043a \u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e T4. <br \/>  \u041f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 SQL \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<pre><code class=\"sql\">SET IDENTITY_INSERT dbo.Config ON INSERT INTO dbo.Config(ID, ColorId, CategoryId, Name) VALUES(2, 2, 4, N'\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441') SET IDENTITY_INSERT dbo.Config OFF  INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 2, 4) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 1, 1) INSERT INTO dbo.CarDetail(ConfigID, DetailID, Count) VALUES(2, 3, 3) <\/code><\/pre>\n<p>  \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0434 C#:<\/p>\n<pre><code>var config = new ConfigTable(); config.Color = &quot;Green&quot;; config.Category = &quot;Bus&quot;; config.Name = &quot;\u0417\u0435\u043b\u0435\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0431\u0443\u0441&quot;; config.Id = 2;  config.Details.Add(&quot;Wheel&quot;, 4); config.Details.Add(&quot;Engine&quot;, 1); config.Details.Add(&quot;Door&quot;, 3); <\/code><\/pre>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-159849","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/159849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=159849"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/159849\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=159849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=159849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=159849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}