Вы не читаете HTTP-запрос от клиента, а просто отправляете ответ и закрываете соединение. Но закрытие сокета, пока есть еще данные для чтения, приведет к возврату соединения обратно клиенту, и это то, что вы увидите в Chrome с помощью ERR_CONNECTION_RESET. Другие браузеры могут вести себя по-другому, и это также проблема синхронизации, если браузер может отобразить ответ перед обработкой сброса.
Чтобы исправить это, сначала прочитайте полный запрос от клиента, прежде чем закрыть сокет.
Я предполагаю, что проблема находится в Вашем методе тестирования. Вы создали Репозиторий с DataContext, но Вы сделали Ваш, отправляет с другим.
[Test]
public void AddSelectionShouldAddSelectionToMarket()
{
Market market = (Market) new Repository().GetMarket(1);
Selection selection = new Selection();
selection.Market = market;
new Repository().AddSelection(selection);
Assert.IsTrue(selection.SID > 0);
}
Создают Репозиторий и используют его в методе тестирования.
[Test]
public void AddSelectionShouldAddSelectionToMarket()
{
Repository repository = new Repository();
Market market = (Market) repository.GetMarket(1);
Selection selection = new Selection();
selection.Market = market;
repository.AddSelection(selection);
Assert.IsTrue(selection.SID > 0);
}
Просто предположение, но это могло бы быть здесь
public Market Market
{
get { return this.market; }
set
{
this.market = value;
this.mID = value.MID;
}
}
, Что происходит, когда значение, которое Вы устанавливаете на Рынок, является пустым? Последняя строка этого будет недопустима начиная с него привычка быть в состоянии разрешить пустой указатель. MID. Возможно, Вам нужно это для Вашего метода set:
set
{
this.market = value;
this.mID = (value == null) ? null : value.MID;
}
Также Ваш MID должен был бы быть nullable
int? MID
Для Вашей новой проблемы; проблема происходит на пустом присвоении на свойство выбора Price. Вы делали это своим кодом? Вы могли снова дать часть кода, что Вы получили исключение? Я имею в виду присвоение на объект Price...
Редактирование согласно комментарию: Я предполагаю, что это из-за пустого исключения управления, как мы упомянули прежде на сообщении GeekyMonkeys. В инициализации класса Выбора свойство Price должно установить как пустой указатель, но когда пустому указателю присваивают, это бросает нулевую ссылку. Таким образом, необходимо сделать пустое управление в наборе ценового свойства.
private List<Price> prices
[DataMember]
public List<Price> Prices
{
get { return this.prices; }
set
{
if(value != null)
{
this.pricess = value;
// For LINQ
foreach (Price price in prices)
{
price.MID = mID;
price.Selection = this;
}
}
}
}
Я предложил бы отправить Ваш код в Sidar хорошо. Он - хороший парень и укажет на Вас в правильном направлении. Или, по крайней мере, отправьте комментарий к его блогу, указывающему на него на Ваш вопрос здесь.
Я знаю, что прошло много времени, и вы, вероятно, уже решили проблему, но, возможно, нет ...
Я предполагая, что ваша структура данных подобна этой:
Market
======
Market_ID int not null identity (1, 1)
Selection
=========
Selection_ID int not null identity (1, 1)
Market_ID int (FK to Market)
Selection_Name varchar(50)
Чтобы добавить новый рынок и новый выбор одновременно:
Selection selection = new Selection();
Market market = new Market();
market.Selections.Add(selection);
DataContext.Markets.InsertOnSubmit(market);
DataContext.SubmitChanges();
Чтобы добавить новый выбор к существующему рынку:
Selection selection = new Selection();
Market market = DataContext.Markets.Where(a => a.Market_ID == 7).Single();
market.Selections.Add(selection);
DataContext.SubmitChanges();
Чтобы обновить первый выбор на рынке:
Selection selection = DataContext.Markets.Where(a => a.Market_ID == 7).Selections.First();
selection.Selection_Name = "New Name";
DataContext.SubmitChanges();