Я не знаю, смогу ли я заархивировать решение и выдать его, так как задействована дозвуковая лицензия. Это не дозвуковой собственно, и около 2 месяцев (устарело). Я просто запустил проект, чтобы проверить, что он все еще работает и работает. Вот шаги, чтобы сделать это:
Используйте класс UpdatableDatabase, указанный выше. Затем извлеките из него БД (укажите это в шаблоне):
публичный частичный класс DB: UpdateableDatabase
UpdatableDatabase.cs должен быть в сочетании с сгенерированными классами, иначе он не будет работать, поскольку он должен использовать GetType () для классов таблицы.
Сервис - это просто сервисный проект с этим классом:
using System.Data.Services;
using Northwind;
namespace NorthwindService
{
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=true)]
public class Northwind: DataService<DB>
{
// This method is called only once to initialize service-wide policies.
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.UseVerboseErrors = true;
}
}
}
Сервисная часть web.config проста:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
Затем для тестового проекта добавьте ссылку на службу в службу. Я взял тестовый код из проекта astoria, я думаю, это было давно:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WcfClientTest.NorthwindService;
namespace WcfClientTest
{
/// <summary>
/// Summary description for WcfTest
/// To run these tests, load this project, and somehow get a server running at the URI.
/// This can be done by updating the service reference to start the development server.
/// </summary>
[TestClass]
public class WcfTest
{
private string baseURI = "http://127.0.0.1:49649/Northwind.svc";
private DB ctx;
/// <summary>
/// Sets up test.
/// </summary>
[TestInitialize]
public void SetUp()
{
ctx = new DB(new Uri(baseURI));
}
[TestCleanup]
public void Cleanup()
{
}
[TestMethod]
public void Select_Simple_With_Variable()
{
int categoryID = 5;
IQueryable<Product> result = from p in ctx.Products
where p.CategoryID == categoryID
select p;
List<Product> products = result.ToList();
Assert.AreEqual(7, products.Count());
}
[TestMethod]
public void TestAddNew()
{
// add customer
var c = new Customer
{
CustomerID = "XXXXX",
ContactTitle = "Prez",
Country = "USA",
ContactName = "Big Guy",
CompanyName = "Big Guy Company"
};
ctx.AddToCustomers(c);
ctx.SaveChanges();
IQueryable<Customer> qCustomer = from cust in ctx.Customers
where cust.CustomerID == "XXXXX"
select cust;
Customer c2 = qCustomer.FirstOrDefault();
Assert.AreEqual("XXXXX", c2.CustomerID);
if (c2 != null)
{
ctx.DeleteObject(c2);
}
ctx.SaveChanges();
IQueryable<Customer> qCustomer2 = from cust in ctx.Customers
where cust.ContactName == "Big Guy"
select cust;
// Returns null if the row isn't found.
Customer c3 = qCustomer2.SingleOrDefault();
Assert.AreEqual(null, c3);
}
}
}
Это все, что у меня есть, это не сложно собрать. Сейчас это решение для поиска проблемы, но я собираюсь использовать его когда-нибудь. Можно было бы полностью обойти дозвуковой эффект и напрямую использовать IQToolkit, и вместе с некоторыми шаблонами T4 у них довольно приятная система.