LINQ к SQL - где Ваш DataContext живет?

Метод Get не требует использования метода подписки, но метод post требует подписи. Получить и отправить образцы кода ниже.

import { Component, OnInit } from '@angular/core'
import { Http, RequestOptions, Headers } from '@angular/http'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch'
import { Post } from './model/post'
import { Observable } from "rxjs/Observable";

@Component({
    templateUrl: './test.html',
    selector: 'test'
})
export class NgFor implements OnInit {

    posts: Observable<Post[]>
    model: Post = new Post()

    /**
     *
     */
    constructor(private http: Http) {

    }

    ngOnInit(){
        this.list()
    }

    private list(){
        this.posts = this.http.get("http://localhost:3000/posts").map((val, i) => <Post[]>val.json())
    }

    public addNewRecord(){
        let bodyString = JSON.stringify(this.model); // Stringify payload
        let headers      = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON
        let options       = new RequestOptions({ headers: headers }); // Create a request option

        this.http.post("http://localhost:3000/posts", this.model, options) // ...using post request
                         .map(res => res.json()) // ...and calling .json() on the response to return data
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error')) //...errors if
                         .subscribe();
    }
}
26
задан George Stocker 29 March 2009 в 19:08
поделиться

4 ответа

Инструкции от документация MSDN относительно класса DataContext - то, что я рекомендовал бы следующему:

В целом, экземпляр DataContext разработан для длительности одну "единицу работы" однако приложение определяет тот термин. DataContext является легким и не является дорогим для создания. Типичный LINQ к приложению SQL создает экземпляры DataContext в объеме метода или как член недолгих классов, которые представляют логический набор связанных операций базы данных.

, поскольку DataContext IDisposable, я нахожу самым легким создать и использовать DataContext в using оператор в рамках одного метода, таким образом, от этого можно избавиться правильно.

Также примечание, что "любые члены экземпляра, как гарантируют, не будут ориентированы на многопотоковое исполнение", таким образом совместно используя одного DataContext между несколькими потоками, было бы неблагоразумно.

33
ответ дан Bradley Grainger 28 November 2019 в 07:27
поделиться

Внедрение зависимости.

Мы предпочитаем сохранять наш бизнес-слой незнакомым с сетью по сравнению с невеб-сценарием. Вместо этого расположенные на слое объекты бизнес-логики берут ссылку DataContext в своем конструкторе, который (явно) позволяет совместно использовать DataContext и (неявно) позволяет совместно использовать объектов объекта от результатов запроса, поскольку они - все от того же контекста данных.

Также DataContexts реализуют IDisposable, таким образом, действительно необходимо управлять их временем жизни. Все наши веб-формы имеют базовый класс, и часть этого является datacontext свойством (лениво созданный). Тем путем все на странице может доля это, который чаще всего имеет место. От контекста избавляются вручную в событии OnUnload() страницы.

<час>
  • Вы не должны смешивать linq объекты от от различных контекстов данных, и Вы обычно попадаете в беду при использовании linq объектов, если datacontext был, Располагают () 'd.
6
ответ дан Robert Paulson 28 November 2019 в 07:27
поделиться

Я использую контекст на поток. Это хитро для установки, но это очищает все, что должно говорить с дб.

1
ответ дан Wyatt 28 November 2019 в 07:27
поделиться

Я использую httpcontext в веб-сценариях и контексте потока для всего остального. Мы создали немного платформы так, чтобы контекст данных был полностью абстрагирован от уровня представления/бизнеса.

0
ответ дан Giovanni Galbo 28 November 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: