a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
168 lines
5.9 KiB
C#
168 lines
5.9 KiB
C#
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Common;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Transactions;
|
|
using NorthwindEFModel;
|
|
using SampleEntityFrameworkProvider;
|
|
using Xunit;
|
|
|
|
namespace ProviderTests
|
|
{
|
|
public class DmlTests : TestBase
|
|
{
|
|
private const string customerId = "ATEST";
|
|
private const string companyName = "Test Customer";
|
|
|
|
[Fact]
|
|
public void Verify_Insert()
|
|
{
|
|
using (var transaction = new TransactionScope())
|
|
{
|
|
InsertCustomer();
|
|
|
|
// Verify the customer was inserted to the database
|
|
Assert.Equal(
|
|
1,
|
|
ExecuteScalar(
|
|
string.Format(
|
|
"SELECT COUNT(*) " +
|
|
"FROM Customers " +
|
|
"WHERE CustomerID = '{0}' AND CompanyName = '{1}' AND Location.STAsText() = 'POINT (17.038333 51.107778)'",
|
|
customerId,
|
|
companyName)));
|
|
|
|
// rollback transaction to revert changes (automatically rolled back by IDisposable)
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Verify_Update()
|
|
{
|
|
const string newCompanyName = "New Company Name";
|
|
|
|
using(var transaction = new TransactionScope())
|
|
{
|
|
// PrepareDb
|
|
InsertCustomer();
|
|
|
|
using (var northwindContext = new NorthwindEntities())
|
|
{
|
|
var customer = northwindContext
|
|
.Customers
|
|
.Single(c => c.CustomerID == customerId);
|
|
|
|
customer.CompanyName = newCompanyName;
|
|
customer.Location = SpatialServices.Instance.GeographyFromText("POINT (-122.191667 47.685833)");
|
|
|
|
northwindContext.SaveChanges();
|
|
}
|
|
|
|
// Verify the customer was updated
|
|
Assert.Equal(
|
|
1,
|
|
ExecuteScalar(
|
|
string.Format(
|
|
"SELECT COUNT(*) " +
|
|
"FROM Customers " +
|
|
"WHERE CustomerID = '{0}' AND CompanyName = '{1}' AND Location.STAsText() = 'POINT (-122.191667 47.685833)'",
|
|
customerId,
|
|
newCompanyName)));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Verify_Delete()
|
|
{
|
|
using (var transaction = new TransactionScope())
|
|
{
|
|
// PrepareDb
|
|
InsertCustomer();
|
|
|
|
using (var northwindContext = new NorthwindEntities())
|
|
{
|
|
var customer = northwindContext
|
|
.Customers
|
|
.Single(c => c.CustomerID == customerId);
|
|
|
|
northwindContext.Customers.DeleteObject(customer);
|
|
northwindContext.SaveChanges();
|
|
}
|
|
|
|
// Verify the customer was updated
|
|
Assert.Equal(
|
|
0,
|
|
ExecuteScalar(
|
|
string.Format(
|
|
"SELECT COUNT(*) FROM Customers WHERE CustomerID = '{0}' AND CompanyName = '{1}'",
|
|
customerId,
|
|
companyName)));
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void Verify_Update_DbGeography()
|
|
{
|
|
using (var transaction = new TransactionScope())
|
|
{
|
|
int orderID;
|
|
using (var northwindContext = new NorthwindEntities())
|
|
{
|
|
var order = northwindContext
|
|
.Orders
|
|
.OrderBy(o => o.OrderID)
|
|
.First();
|
|
|
|
orderID = order.OrderID;
|
|
|
|
order.ContainerSize = SpatialServices.Instance.GeometryFromText("LINESTRING (100 100, 20 180, 180 180)");
|
|
northwindContext.SaveChanges();
|
|
}
|
|
|
|
// Verify the customer was updated
|
|
Assert.Equal(
|
|
1,
|
|
ExecuteScalar(
|
|
string.Format(
|
|
"SELECT COUNT(*) FROM Orders WHERE OrderID = '{0}' AND ContainerSize.STAsText() = 'LINESTRING (100 100, 20 180, 180 180)'",
|
|
orderID)));
|
|
}
|
|
}
|
|
|
|
private static void InsertCustomer()
|
|
{
|
|
using (var northwindContext = new NorthwindEntities())
|
|
{
|
|
northwindContext.Customers.AddObject(
|
|
new Customer()
|
|
{
|
|
CustomerID = customerId,
|
|
CompanyName = companyName,
|
|
Location = SpatialServices.Instance.GeographyFromText("POINT (17.038333 51.107778)")
|
|
});
|
|
|
|
northwindContext.SaveChanges();
|
|
}
|
|
}
|
|
|
|
private static int ExecuteScalar(string commandText)
|
|
{
|
|
// Verify the customer was inserted to the database
|
|
var providerFactory = DbProviderFactories.GetFactory(SampleProviderName);
|
|
using (var connection = providerFactory.CreateConnection())
|
|
{
|
|
connection.ConnectionString = NorthwindDirectConnectionString;
|
|
|
|
var command = connection.CreateCommand();
|
|
command.CommandText = commandText;
|
|
|
|
connection.Open();
|
|
return (int)command.ExecuteScalar();
|
|
}
|
|
}
|
|
}
|
|
}
|