diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/CreatingResourcesTests.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/CreatingResourcesTests.cs
index 40a973df..e1b5a308 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/CreatingResourcesTests.cs
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/CreatingResourcesTests.cs
@@ -39,6 +39,52 @@ public async Task Post_with_client_provided_id()
}
}
+ [TestMethod]
+ [DeploymentItem(@"Data\PostID.csv", @"Data")]
+ public async Task PostID_with_client_provided_id()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitPost(effortConnection, "post-i-ds", @"Fixtures\CreatingResources\Requests\PostID_with_client_provided_id_Request.json");
+
+ await AssertResponseContent(response, @"Fixtures\CreatingResources\Responses\PostID_with_client_provided_id_Response.json", HttpStatusCode.OK);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsID.ToArray();
+ allPosts.Length.Should().Be(5);
+ var actualPost = allPosts.First(t => t.ID == "205");
+ actualPost.ID.Should().Be("205");
+ actualPost.Title.Should().Be("Added post");
+ actualPost.Content.Should().Be("Added post content");
+ actualPost.Created.Should().Be(new DateTimeOffset(2015, 03, 11, 04, 31, 0, new TimeSpan(0)));
+ }
+ }
+ }
+
+ [TestMethod]
+ [DeploymentItem(@"Data\PostLongId.csv", @"Data")]
+ public async Task PostLongId_with_client_provided_id()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitPost(effortConnection, "post-long-ids", @"Fixtures\CreatingResources\Requests\PostLongId_with_client_provided_id_Request.json");
+
+ await AssertResponseContent(response, @"Fixtures\CreatingResources\Responses\PostLongId_with_client_provided_id_Response.json", HttpStatusCode.OK);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsLongId.ToArray();
+ allPosts.Length.Should().Be(5);
+ var actualPost = allPosts.First(t => t.Id == 205);
+ actualPost.Id.Should().Be(205);
+ actualPost.Title.Should().Be("Added post");
+ actualPost.Content.Should().Be("Added post content");
+ actualPost.Created.Should().Be(new DateTimeOffset(2015, 03, 11, 04, 31, 0, new TimeSpan(0)));
+ }
+ }
+ }
+
[TestMethod]
[DeploymentItem(@"Data\Comment.csv", @"Data")]
[DeploymentItem(@"Data\Post.csv", @"Data")]
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostID.csv b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostID.csv
new file mode 100644
index 00000000..544b39c7
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostID.csv
@@ -0,0 +1,5 @@
+ID,Title,Content,Created,AuthorId
+"201","Post 1","Post 1 content","2015-01-31T14:00Z"
+"202","Post 2","Post 2 content","2015-02-05T08:10Z"
+"203","Post 3","Post 3 content","2015-02-07T11:11Z"
+"204","Post 4","Post 4 content","2015-02-08T06:59Z"
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostLongId.csv b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostLongId.csv
new file mode 100644
index 00000000..ac3f5a42
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Data/PostLongId.csv
@@ -0,0 +1,5 @@
+Id,Title,Content,Created,AuthorId
+201,"Post 1","Post 1 content","2015-01-31T14:00Z"
+202,"Post 2","Post 2 content","2015-02-05T08:10Z"
+203,"Post 3","Post 3 content","2015-02-07T11:11Z"
+204,"Post 4","Post 4 content","2015-02-08T06:59Z"
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/DeletingResourcesTests.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/DeletingResourcesTests.cs
index c5902256..f77715f5 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/DeletingResourcesTests.cs
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/DeletingResourcesTests.cs
@@ -11,11 +11,11 @@ namespace JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests
public class DeletingResourcesTests : AcceptanceTestsBase
{
[TestMethod]
- [DeploymentItem(@"Data\Comment.csv", @"Acceptance\Data")]
- [DeploymentItem(@"Data\Post.csv", @"Acceptance\Data")]
- [DeploymentItem(@"Data\PostTagLink.csv", @"Acceptance\Data")]
- [DeploymentItem(@"Data\Tag.csv", @"Acceptance\Data")]
- [DeploymentItem(@"Data\User.csv", @"Acceptance\Data")]
+ [DeploymentItem(@"Data\Comment.csv", @"Data")]
+ [DeploymentItem(@"Data\Post.csv", @"Data")]
+ [DeploymentItem(@"Data\PostTagLink.csv", @"Data")]
+ [DeploymentItem(@"Data\Tag.csv", @"Data")]
+ [DeploymentItem(@"Data\User.csv", @"Data")]
public async Task Delete()
{
using (var effortConnection = GetEffortConnection())
@@ -28,10 +28,54 @@ public async Task Delete()
using (var dbContext = new TestDbContext(effortConnection, false))
{
- var allTodos = dbContext.Posts.ToArray();
- allTodos.Length.Should().Be(3);
- var actualTodo = allTodos.FirstOrDefault(t => t.Id == "203");
- actualTodo.Should().BeNull();
+ var allPosts = dbContext.Posts.ToArray();
+ allPosts.Length.Should().Be(3);
+ var actualPosts = allPosts.FirstOrDefault(t => t.Id == "203");
+ actualPosts.Should().BeNull();
+ }
+ }
+ }
+
+ [TestMethod]
+ [DeploymentItem(@"Data\PostID.csv", @"Data")]
+ public async Task DeleteID()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitDelete(effortConnection, "post-i-ds/203");
+
+ var responseContent = await response.Content.ReadAsStringAsync();
+ responseContent.Should().Be("");
+ response.StatusCode.Should().Be(HttpStatusCode.NoContent);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsID.ToArray();
+ allPosts.Length.Should().Be(3);
+ var actualPosts = allPosts.FirstOrDefault(t => t.ID == "203");
+ actualPosts.Should().BeNull();
+ }
+ }
+ }
+
+ [TestMethod]
+ [DeploymentItem(@"Data\PostLongId.csv", @"Data")]
+ public async Task DeleteLongId()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitDelete(effortConnection, "post-long-ids/203");
+
+ var responseContent = await response.Content.ReadAsStringAsync();
+ responseContent.Should().Be("");
+ response.StatusCode.Should().Be(HttpStatusCode.NoContent);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsLongId.ToArray();
+ allPosts.Length.Should().Be(3);
+ var actualPosts = allPosts.FirstOrDefault(t => t.Id == 203);
+ actualPosts.Should().BeNull();
}
}
}
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostID_with_client_provided_id_Request.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostID_with_client_provided_id_Request.json
new file mode 100644
index 00000000..41424e02
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostID_with_client_provided_id_Request.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-i-ds",
+ "id": "205",
+ "attributes": {
+ "title": "Added post",
+ "content": "Added post content",
+ "created": "2015-03-11T04:31:00+00:00"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostLongId_with_client_provided_id_Request.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostLongId_with_client_provided_id_Request.json
new file mode 100644
index 00000000..b52fe5c4
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Requests/PostLongId_with_client_provided_id_Request.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-long-ids",
+ "id": "205",
+ "attributes": {
+ "title": "Added post",
+ "content": "Added post content",
+ "created": "2015-03-11T04:31:00+00:00"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostID_with_client_provided_id_Response.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostID_with_client_provided_id_Response.json
new file mode 100644
index 00000000..7122e9e9
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostID_with_client_provided_id_Response.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-i-ds",
+ "id": "205",
+ "attributes": {
+ "content": "Added post content",
+ "created": "2015-03-11T04:31:00.0000000+00:00",
+ "title": "Added post"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostLongId_with_client_provided_id_Response.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostLongId_with_client_provided_id_Response.json
new file mode 100644
index 00000000..dc5ee0f8
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/CreatingResources/Responses/PostLongId_with_client_provided_id_Response.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-long-ids",
+ "id": "205",
+ "attributes": {
+ "content": "Added post content",
+ "created": "2015-03-11T04:31:00.0000000+00:00",
+ "title": "Added post"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestID.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestID.json
new file mode 100644
index 00000000..ac7fbb4b
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestID.json
@@ -0,0 +1,9 @@
+{
+ "data": {
+ "type": "post-i-ds",
+ "id": "202",
+ "attributes": {
+ "title": "New post title"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestLongId.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestLongId.json
new file mode 100644
index 00000000..7358d7a8
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Requests/PatchWithAttributeUpdateRequestLongId.json
@@ -0,0 +1,9 @@
+{
+ "data": {
+ "type": "post-long-ids",
+ "id": "202",
+ "attributes": {
+ "title": "New post title"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseID.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseID.json
new file mode 100644
index 00000000..b0448cb5
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseID.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-i-ds",
+ "id": "202",
+ "attributes": {
+ "content": "Post 2 content",
+ "created": "2015-02-05T08:10:00.0000000+00:00",
+ "title": "New post title"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseLongId.json b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseLongId.json
new file mode 100644
index 00000000..fea5fa0a
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/Fixtures/UpdatingResources/Responses/PatchWithAttributeUpdateResponseLongId.json
@@ -0,0 +1,11 @@
+{
+ "data": {
+ "type": "post-long-ids",
+ "id": "202",
+ "attributes": {
+ "content": "Post 2 content",
+ "created": "2015-02-05T08:10:00.0000000+00:00",
+ "title": "New post title"
+ }
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests.csproj b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests.csproj
index f0cfb3c7..f7a3c706 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests.csproj
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests.csproj
@@ -132,6 +132,12 @@
Always
+
+ Always
+
+
+ Always
+
Always
@@ -240,6 +246,14 @@
+
+
+
+
+
+
+
+
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/UpdatingResourcesTests.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/UpdatingResourcesTests.cs
index 9d898537..48df90f9 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/UpdatingResourcesTests.cs
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/UpdatingResourcesTests.cs
@@ -41,6 +41,52 @@ public async Task PatchWithAttributeUpdate()
}
}
+ [TestMethod]
+ [DeploymentItem(@"Data\PostID.csv", @"Data")]
+ public async Task PatchWithAttributeUpdateID()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitPatch(effortConnection, "post-i-ds/202", @"Fixtures\UpdatingResources\Requests\PatchWithAttributeUpdateRequestID.json");
+
+ await AssertResponseContent(response, @"Fixtures\UpdatingResources\Responses\PatchWithAttributeUpdateResponseID.json", HttpStatusCode.OK);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsID;
+ allPosts.Count().Should().Be(4);
+ var actualPost = allPosts.First(t => t.ID == "202");
+ actualPost.ID.Should().Be("202");
+ actualPost.Title.Should().Be("New post title");
+ actualPost.Content.Should().Be("Post 2 content");
+ actualPost.Created.Should().Be(new DateTimeOffset(2015, 02, 05, 08, 10, 0, new TimeSpan(0)));
+ }
+ }
+ }
+
+ [TestMethod]
+ [DeploymentItem(@"Data\PostLongId.csv", @"Data")]
+ public async Task PatchWithAttributeUpdateLongId()
+ {
+ using (var effortConnection = GetEffortConnection())
+ {
+ var response = await SubmitPatch(effortConnection, "post-long-ids/202", @"Fixtures\UpdatingResources\Requests\PatchWithAttributeUpdateRequestLongId.json");
+
+ await AssertResponseContent(response, @"Fixtures\UpdatingResources\Responses\PatchWithAttributeUpdateResponseLongId.json", HttpStatusCode.OK);
+
+ using (var dbContext = new TestDbContext(effortConnection, false))
+ {
+ var allPosts = dbContext.PostsLongId;
+ allPosts.Count().Should().Be(4);
+ var actualPost = allPosts.First(t => t.Id == 202);
+ actualPost.Id.Should().Be(202);
+ actualPost.Title.Should().Be("New post title");
+ actualPost.Content.Should().Be("Post 2 content");
+ actualPost.Created.Should().Be(new DateTimeOffset(2015, 02, 05, 08, 10, 0, new TimeSpan(0)));
+ }
+ }
+ }
+
[TestMethod]
[DeploymentItem(@"Data\Comment.csv", @"Data")]
[DeploymentItem(@"Data\Post.csv", @"Data")]
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.csproj b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.csproj
index d7b1469b..0a5148ea 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.csproj
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.csproj
@@ -138,6 +138,8 @@
+
+
@@ -204,11 +206,11 @@
-
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostID.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostID.cs
new file mode 100644
index 00000000..4e7bd60f
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostID.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Newtonsoft.Json;
+
+namespace JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Models
+{
+ public class PostID
+ {
+ [Key]
+ public string ID { get; set; }
+
+ public string Title { get; set; }
+
+ public string Content { get; set; }
+
+ public DateTimeOffset Created { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostLongId.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostLongId.cs
new file mode 100644
index 00000000..24e830d5
--- /dev/null
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/PostLongId.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Newtonsoft.Json;
+
+namespace JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Models
+{
+ public class PostLongId
+ {
+ [Key]
+ public long Id { get; set; }
+
+ public string Title { get; set; }
+
+ public string Content { get; set; }
+
+ public DateTimeOffset Created { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/TestDbContext.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/TestDbContext.cs
index d0d8aec8..4850d0a0 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/TestDbContext.cs
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Models/TestDbContext.cs
@@ -40,6 +40,8 @@ protected override void OnModelCreating(DbModelBuilder modelBuilder)
public DbSet Comments { get; set; }
public DbSet Languages { get; set; }
public DbSet Posts { get; set; }
+ public DbSet PostsID { get; set; }
+ public DbSet PostsLongId { get; set; }
public DbSet Tags { get; set; }
public DbSet Users { get; set; }
public DbSet LanguageUserLinks { get; set; }
diff --git a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs
index b4fee0ec..371b9a22 100644
--- a/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs
+++ b/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs
@@ -48,6 +48,8 @@ public void Configuration(IAppBuilder app)
c.OverrideDefaultSortById(LanguageUserLinkSortByIdFactory);
});
configuration.RegisterResourceType();
+ configuration.RegisterResourceType();
+ configuration.RegisterResourceType();
configuration.RegisterEntityFrameworkResourceType();
configuration.RegisterEntityFrameworkResourceType();
configuration.RegisterEntityFrameworkResourceType();
diff --git a/JSONAPI.EntityFramework.Tests/DbContextExtensionsTests.cs b/JSONAPI.EntityFramework.Tests/DbContextExtensionsTests.cs
index 4b8d4ed2..8548b6bd 100644
--- a/JSONAPI.EntityFramework.Tests/DbContextExtensionsTests.cs
+++ b/JSONAPI.EntityFramework.Tests/DbContextExtensionsTests.cs
@@ -17,6 +17,7 @@ private class TestDbContext : DbContext
{
public DbSet Backlinks { get; set; }
public DbSet Posts { get; set; }
+ public DbSet PostIDs { get; set; }
public TestDbContext(DbConnection conn) : base(conn, true)
{
@@ -34,6 +35,10 @@ private class SubPost : Post
{
public string Foo { get; set; }
}
+ private class SubPostID : PostID
+ {
+ public string Foo { get; set; }
+ }
private DbConnection _conn;
private TestDbContext _context;
@@ -71,6 +76,17 @@ public void GetKeyNamesStandardIdTest()
keyNames.First().Should().Be("Id");
}
+ [TestMethod]
+ public void GetKeyNamesStandardIDTest()
+ {
+ // Act
+ IEnumerable keyNames = _context.GetKeyNames(typeof(PostID)).ToArray();
+
+ // Assert
+ keyNames.Count().Should().Be(1);
+ keyNames.First().Should().Be("ID");
+ }
+
[TestMethod]
public void GetKeyNamesNonStandardIdTest()
{
@@ -93,6 +109,17 @@ public void GetKeyNamesForChildClass()
keyNames.First().Should().Be("Id");
}
+ [TestMethod]
+ public void GetKeyNamesForChildClassID()
+ {
+ // Act
+ IEnumerable keyNames = _context.GetKeyNames(typeof(SubPostID)).ToArray();
+
+ // Assert
+ keyNames.Count().Should().Be(1);
+ keyNames.First().Should().Be("ID");
+ }
+
[TestMethod]
public void GetKeyNamesNotAnEntityTest()
{
diff --git a/JSONAPI.EntityFramework.Tests/JSONAPI.EntityFramework.Tests.csproj b/JSONAPI.EntityFramework.Tests/JSONAPI.EntityFramework.Tests.csproj
index 2938cf78..6e341345 100644
--- a/JSONAPI.EntityFramework.Tests/JSONAPI.EntityFramework.Tests.csproj
+++ b/JSONAPI.EntityFramework.Tests/JSONAPI.EntityFramework.Tests.csproj
@@ -119,6 +119,7 @@
+
diff --git a/JSONAPI.EntityFramework.Tests/Models/PostID.cs b/JSONAPI.EntityFramework.Tests/Models/PostID.cs
new file mode 100644
index 00000000..420e047a
--- /dev/null
+++ b/JSONAPI.EntityFramework.Tests/Models/PostID.cs
@@ -0,0 +1,21 @@
+namespace JSONAPI.EntityFramework.Tests.Models
+{
+ using System;
+ using System.Collections.Generic;
+ using System.ComponentModel.DataAnnotations.Schema;
+
+ public partial class PostID
+ {
+ public PostID()
+ {
+ this.Comments = new HashSet();
+ }
+
+ [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+ public Guid ID { get; set; }
+ public string Title { get; set; }
+
+ public virtual Author Author { get; set; }
+ public virtual ICollection Comments { get; set; }
+ }
+}
diff --git a/JSONAPI.EntityFramework/EntityFrameworkResourceObjectMaterializer.cs b/JSONAPI.EntityFramework/EntityFrameworkResourceObjectMaterializer.cs
index 57c2b29b..b0b26ea9 100644
--- a/JSONAPI.EntityFramework/EntityFrameworkResourceObjectMaterializer.cs
+++ b/JSONAPI.EntityFramework/EntityFrameworkResourceObjectMaterializer.cs
@@ -69,8 +69,10 @@ public async Task