diff --git a/src/EntityFramework.BulkInsert.Test/App.config b/src/EntityFramework.BulkInsert.Test/App.config
index 5d3c228..cbef38e 100644
--- a/src/EntityFramework.BulkInsert.Test/App.config
+++ b/src/EntityFramework.BulkInsert.Test/App.config
@@ -11,6 +11,7 @@
+
diff --git a/src/EntityFramework.BulkInsert.Test/EntityFramework.BulkInsert.Test.csproj b/src/EntityFramework.BulkInsert.Test/EntityFramework.BulkInsert.Test.csproj
index 3a26cf4..1dba5ce 100644
--- a/src/EntityFramework.BulkInsert.Test/EntityFramework.BulkInsert.Test.csproj
+++ b/src/EntityFramework.BulkInsert.Test/EntityFramework.BulkInsert.Test.csproj
@@ -170,6 +170,14 @@
+
+
+
+
+
+
+
+
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Child.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Child.cs
new file mode 100644
index 0000000..afe81f3
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Child.cs
@@ -0,0 +1,12 @@
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ [Table("Childs")]
+ public class Child : Parent
+ {
+ public DateTime CreateDate { get; set; }
+ public DateTime? UpdateDate { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Parent.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Parent.cs
new file mode 100644
index 0000000..42e0f94
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/01 StandardInheritance/Parent.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ public class Parent
+ {
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
+ public long ID { get; set; }
+
+ [MaxLength(10)]
+ public string Number { get; set; }
+
+ public bool IsEmpty { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/AbstractParent.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/AbstractParent.cs
new file mode 100644
index 0000000..525a563
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/AbstractParent.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ public abstract class AbstractParent
+ {
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
+ public long ID { get; set; }
+
+ [MaxLength(10)]
+ public string Number { get; set; }
+
+ public bool IsEmpty { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/ApChild.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/ApChild.cs
new file mode 100644
index 0000000..e644bd4
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/02 TablePerType/ApChild.cs
@@ -0,0 +1,15 @@
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ ///
+ /// Child of abstract parent.
+ ///
+ [Table("ApChilds")]
+ public class ApChild : AbstractParent
+ {
+ public DateTime CreateDate { get; set; }
+ public DateTime? UpdateDate { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedChild.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedChild.cs
new file mode 100644
index 0000000..59283ef
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedChild.cs
@@ -0,0 +1,12 @@
+using System;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ [Table("RenamedChild")]
+ public class RenamedChild : RenamedParent
+ {
+ public DateTime CreateDate { get; set; }
+ public DateTime? UpdateDate { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedParent.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedParent.cs
new file mode 100644
index 0000000..0a46c4f
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/03 Renamed Tables/RenamedParent.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ [Table("RenamedDocument")]
+ public class RenamedParent
+ {
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
+ public long ID { get; set; }
+
+ [MaxLength(10)]
+ public string Number { get; set; }
+
+ public bool IsEmpty { get; set; }
+ }
+}
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceIssueContext.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceIssueContext.cs
new file mode 100644
index 0000000..8f94d39
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceIssueContext.cs
@@ -0,0 +1,40 @@
+using EntityFramework.BulkInsert.Test.CodeFirst;
+using EntityFramework.BulkInsert.Test.CodeFirst.Domain;
+#if EF6
+#endif
+
+#if EF4
+using System.ComponentModel.DataAnnotations;
+#endif
+
+#if EF5
+using System.ComponentModel.DataAnnotations.Schema;
+#endif
+
+using System.Data.Entity;
+
+namespace EntityFramework.BulkInsert.Test
+{
+#if EF6
+ [DbConfigurationType(typeof(SqlContextConfig))]
+#endif
+ public class InheritanceIssueContext : DbContext
+ {
+ public InheritanceIssueContext() : base("InheritanceIssueContext")
+ {
+ }
+
+ public InheritanceIssueContext(string connectionStringName) : base(connectionStringName)
+ {
+ }
+
+ public DbSet Parents { get; set; }
+ public DbSet Childs { get; set; }
+
+ public DbSet AbstractParents { get; set; }
+ public DbSet ApChilds { get; set; }
+
+ public DbSet RenamedParents { get; set; }
+ public DbSet RenamedChilds { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceTests.cs b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceTests.cs
new file mode 100644
index 0000000..8842fdb
--- /dev/null
+++ b/src/EntityFramework.BulkInsert.Test/IssueWithInheritance/InheritanceTests.cs
@@ -0,0 +1,237 @@
+using EntityFramework.BulkInsert.Extensions;
+using EntityFramework.BulkInsert.Test.CodeFirst;
+using NUnit.Framework;
+using System;
+using System.Linq;
+
+namespace EntityFramework.BulkInsert.Test
+{
+ class InheritanceTests : TestBase
+ {
+ protected override InheritanceIssueContext GetContext()
+ {
+ return new InheritanceIssueContext();
+ }
+
+#if EF6
+ [Test]
+ public void BulkInsert_OnlyParent_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new Parent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+
+ ctx.BulkInsert(new Parent[] { parent });
+
+ Assert.AreEqual(1, ctx.Parents.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertChild_ParentExists_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new Parent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+ ctx.Parents.Add(parent);
+ ctx.SaveChanges();
+
+ var child = new Child()
+ {
+ ID = 1,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new Child[] { child });
+
+ Assert.AreEqual(1, ctx.Parents.Count());
+ Assert.AreEqual(1, ctx.Childs.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertChild_ParentNotExists_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var child = new Child()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new Child[] { child });
+
+ Assert.AreEqual(1, ctx.Parents.Count());
+ Assert.AreEqual(1, ctx.Childs.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertParentAndChild_TwoTablesUpdated()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new Parent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+
+ var child = new Child()
+ {
+ ID = 1,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new Parent[] { parent });
+ ctx.BulkInsert(new Child[] { child });
+
+ Assert.AreEqual(1, ctx.Parents.Count());
+ Assert.AreEqual(1, ctx.Childs.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertApChild_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var child = new ApChild()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new ApChild[] { child });
+
+ Assert.AreEqual(1, ctx.AbstractParents.Count());
+ Assert.AreEqual(1, ctx.ApChilds.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsert_RenamedParent_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new RenamedParent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+
+ ctx.BulkInsert(new RenamedParent[] { parent });
+
+ Assert.AreEqual(1, ctx.RenamedParents.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertChild_RenamedParentExists_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new RenamedParent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+ ctx.RenamedParents.Add(parent);
+ ctx.SaveChanges();
+
+ var child = new RenamedChild()
+ {
+ ID = 1,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new RenamedChild[] { child });
+
+ Assert.AreEqual(1, ctx.RenamedParents.Count());
+ Assert.AreEqual(1, ctx.RenamedChilds.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertRenamedChild_RenamedParentNotExists_OneRowInserted()
+ {
+ using (var ctx = GetContext())
+ {
+ var child = new RenamedChild()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new RenamedChild[] { child });
+
+ Assert.AreEqual(1, ctx.RenamedParents.Count());
+ Assert.AreEqual(1, ctx.RenamedChilds.Count());
+ }
+ }
+
+ [Test]
+ public void BulkInsertRenamedParentAndChild_TwoTablesUpdated()
+ {
+ using (var ctx = GetContext())
+ {
+ var parent = new RenamedParent()
+ {
+ ID = 1,
+ Number = "1",
+ IsEmpty = true,
+ };
+
+ var child = new RenamedChild()
+ {
+ ID = 1,
+ CreateDate = DateTime.Now,
+ };
+
+ ctx.BulkInsert(new RenamedParent[] { parent });
+ ctx.BulkInsert(new RenamedChild[] { child });
+
+ Assert.AreEqual(1, ctx.RenamedParents.Count());
+ Assert.AreEqual(1, ctx.RenamedChilds.Count());
+ }
+ }
+
+ [SetUp]
+ public override void Setup()
+ {
+ base.Setup();
+ using (var ctx = GetContext())
+ {
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[Childs]");
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[Parents]");
+
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[ApChilds]");
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[AbstractParents]");
+
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[RenamedChild]");
+ ctx.Database.ExecuteSqlCommand("DELETE FROM [dbo].[RenamedDocument]");
+ }
+ }
+#endif
+ }
+}