1

DB에 연결할 웹 응용 프로그램을 구축 중입니다. 지금까지 나는 그것을 처리 할 수 ​​있었다. (나는 BLL & DAL을 만들지 않았지만).웹 응용 프로그램에 대한 전역 변수 만들기 - ASP.NET

나는 "id"열이있는 테이블이 있습니다. SQL Server에서 자동으로 증가되도록 선언하는 방법이 있다는 것을 알고 있습니다. (하지만 나는 그것을 원하지 않는다).

값을 보유 할 전역 응용 프로그램 변수를 선언하고 싶습니다.

  1. 내가 선언 방법 :

    나는이 개 질문이?

  2. 어디에서 생성하고 초기화합니까? (나는 여러 로그인 페이지를 가지고있다).

고맙습니다!

p.s

누군가가 내 저장 프로 시저로 DAL을 구축 어떻게 말해한다면 그것은 도움이 될 것입니다? 그리고 내가 필요한 건 내가 DAL에서 할 수없는 BLL을 사용해야합니까?

+2

db IDENTITY 열을 사용하지 않는 이유는 무엇입니까? – InSane

+1

PS에 관해서는 새로운 질문을하는 것이 좋습니다. – Oded

답변

5

Application 개체를 사용할 수 있습니다.이 개체는 HttpContext의 일부이며 모든 페이지에서 직접 액세스 할 수 있습니다.

정적 멤버를 보유하는 Globals 클래스 (또는 원하는 이름)를 쓰고 싶을 수 있습니다.

public class Globals 
{ 
    public static int Counter { get; set;} 
} 

// accessed from other classes: 
Globals.Counter++; 

웹 팜 또는 여러 웹 응용 프로그램이 있어도 다시 시작할 수없는 방식으로는 작동하지 않습니다.


에 관계없이 이러한 옵션의 오른쪽 솔루션 (심지어 당신이 그것을 사용하지 않으려면? - 당신이 이유를 설명 할 수 있습니다)에 IDENTITY 절과 ID 필드를 사용하는 것입니다.

+0

지금 앱에 대한 테스트를 시작하고 있으며 신원 정보는 계속 유지됩니까? – RonenIL

+0

@RonenIL - 당신이 원했던 것이 아닌가요? – Oded

1

변수 저장은 쉬운 부분입니다. 자신의 ID 생성과 경합 및 동시성 문제를 관리하는 것이 어려운 부분입니다. 행운을 빕니다.

1

ASP.NET에는 전역 변수와 같은 것이 없습니다. HTTP는 상태 비 저장이라는 것을 기억하십시오.

당신은 응용 프로그램 개체에 뭔가를 저장하는 올 수있는 가장 가까운 :

Application["myvar" ] = x; 
x = Application["myvar"]; 

그러나 심지어 여기,이 변수가 응용 프로그램이 수시로 할 수있는, 다시 시작해야 할 때 손실됩니다.

설명하는 내용에 대한 훨씬 더 나은 해결책은 데이터베이스 값입니다.

0

정수를 증가시킨 다음 증가 된 ID를 db에 던지면 위험 할 수 있습니다. 멀티 스레딩? 애플리케이션이 반송 될 때 어떤 일이 발생합니까? dev와 prod는 동일한 숫자 세트를 공유합니까?

전 세계적으로 고유 한 식별자가 필요하며 데이터베이스 외부에서 생성 할 수있는 것처럼 들립니다.GUID 일을하는 것처럼 들립니다. 물론, DB에서 더 많은 공간을 차지하지만 데이터베이스에 대해 수행 할 최악의 상황은 아닙니다.

+0

GUID도 데이터베이스에서 매우 잘못 인덱스됩니다. 약간의 색인을 생성 할 수있는 가상 GUID를 만드는 데 사용할 수있는 해킹이 있지만 약간의 고통이 있습니다. PK로서의 GUID는 데이터베이스에서 상당히 널리 퍼진 성능입니다. – David