Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tests for inheritance cases. #48

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/EntityFramework.BulkInsert.Test/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<add name="ef_bulkinsert_db_firstEntities" connectionString="metadata=res://*/DbFirst.BloggingModel.csdl|res://*/DbFirst.BloggingModel.ssdl|res://*/DbFirst.BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\MSSQLLocalDB;initial catalog=ef_bulkinsert_db_first;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="DbFirstContext" connectionString="metadata=res://*/DbFirst.DbFirstModel.csdl|res://*/DbFirst.DbFirstModel.ssdl|res://*/DbFirst.DbFirstModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\MSSQLLocalDB;initial catalog=ef_bulkinsert_db_first;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="DbFirstTestEntities" connectionString="metadata=res://*/DatabaseFirst.TestDataModel.csdl|res://*/DatabaseFirst.TestDataModel.ssdl|res://*/DatabaseFirst.TestDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\MSSQLLocalDB;initial catalog=GridDemo;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="InheritanceIssueContext" connectionString="Data Source=localhost,1433; Initial Catalog=ef_bulkinsert_test;User Id=sa;Password=W3D01NDAT4SH0!;Persist Security Info=false;Integrated Security=false;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@
<Compile Include="Issue1369\Issue1369Context.cs" />
<Compile Include="Issue1369\LoanEntity.cs" />
<Compile Include="Issue1369\CreditReportEntity.cs" />
<Compile Include="IssueWithInheritance\01 StandardInheritance\Child.cs" />
<Compile Include="IssueWithInheritance\01 StandardInheritance\Parent.cs" />
<Compile Include="IssueWithInheritance\02 TablePerType\AbstractParent.cs" />
<Compile Include="IssueWithInheritance\02 TablePerType\ApChild.cs" />
<Compile Include="IssueWithInheritance\03 Renamed Tables\RenamedChild.cs" />
<Compile Include="IssueWithInheritance\03 Renamed Tables\RenamedParent.cs" />
<Compile Include="IssueWithInheritance\InheritanceIssueContext.cs" />
<Compile Include="IssueWithInheritance\InheritanceTests.cs" />
<Compile Include="MappedDataReaderTest.cs" />
<Compile Include="CodeFirst\Domain\ComplexTypes\Address.cs" />
<Compile Include="CodeFirst\Domain\ComplexTypes\Contact.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.ComponentModel.DataAnnotations.Schema;

namespace EntityFramework.BulkInsert.Test
{
/// <summary>
/// Child of abstract parent.
/// </summary>
[Table("ApChilds")]
public class ApChild : AbstractParent
{
public DateTime CreateDate { get; set; }
public DateTime? UpdateDate { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -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<Parent> Parents { get; set; }
public DbSet<Child> Childs { get; set; }

public DbSet<AbstractParent> AbstractParents { get; set; }
public DbSet<ApChild> ApChilds { get; set; }

public DbSet<RenamedParent> RenamedParents { get; set; }
public DbSet<RenamedChild> RenamedChilds { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -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<InheritanceIssueContext>
{
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
}
}