ASP.NET MVC 3 층 프레임 워 크 를 확장 하고 StructureMap 을 사용 하여 의존 주입 1-Model 층 실현
5715 단어 ASP.NETMVCStructureMap1-모델 층
우선 TYStudio Demo.Models 라 는 프로젝트 의 내용 을 살 펴 보 겠 습 니 다.
이 안 에는 우리 의 Entity Framwork 의 edmx 파일,Northwind 데이터베이스 시트 맵 의 대상 집합 이 있 습 니 다.ADO.Net Entity Data Model 을 만 들 때 기본 값 으로.tt 파일 을 만 드 는 방식 이 아니 라 오래된 형식 을 사용 합 니 다.실현 방법 은 우선 기본 프로그램 에 따라 data model 을 만 들 고 data model 을 만 든 후에.tt 파일 을 삭제 하 는 것 입 니 다.그 다음 에.edmx 파일 을 열 고 오른쪽 단 추 를 눌 러 서 Properties(속성)를 선택 하면 다음 캡 처 가 나타 납 니 다.이때 Code Generation Strategy(중국어 번역 은 뭔 지 모 르 지만 첫 번 째 는 맞습니다)의 값 만 수정 하면 됩 니 다.기본 값 은 None 입 니 다.우 리 는 Default 로 수정 한 다음 에 저장 합 니 다.edmx
4.567916.프로젝트 에 TYEntities.cs 파일 이 하나 더 있다 는 것 을 알 게 되 었 을 것 입 니 다.이것 은 우리 시스템 에서 Transaction(사무 처리)을 실현 하 는 관건 입 니 다.저 희 는 static 과[ThreadStatic]속성 을 사용 하여 하나의 스 레 드 가 가 져 온 TYEntities(Object Context)가 항상 같 음 을 보증 합 니 다.이것 은 Transaction 업무 의 문 제 를 해결 합 니 다.설명 되 지 않 은 것 은 아래 코드 안의 주석 을 자세히 읽 으 세 요.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace TYStudioDemo.Models
{
public partial class TYEntities
{
#region Fields
//
const string ContextKey = "TYEntities";
// ThreadStaticAttribute 。
// , 。 , 。
[ThreadStatic]
private static TYEntities _current;
#endregion
#region Properties
public bool Disposed { get; set; }
/// <summary>
/// HttpContext , TYEntities(ObjectContext), HttpContext null
///
/// TYEntities, TYEntities.Cleanup()
/// TYEntities.Cleanup() Global.asax.cs 。
/// void Application_EndRequest(object sender, EventArgs e)
/// {
/// TYStudioDemo.Models.TYEntities.Cleanup();
/// }
/// </summary>
private static TYEntities ForWebRequest
{
get
{
var context = HttpContext.Current;
// HttpContext
if (context != null)
{
// context TYEntities
var result = context.Items[ContextKey] as TYEntities;
if (result == null)
{
// datacontext, context
result = new TYEntities();
context.Items[ContextKey] = result;
}
return result;
}
return null;
}
}
/// <summary>
/// TYEntities(ObjectContext)
///
/// HttpContext TYEntities, TYEntities, TYEntities.Cleanup()
///
/// HttpContext TYEntities, TYEntities.Cleanup() , ObjectContext。
///
/// , TYEntities, Dispose TYEntities(ObjectContext)。
/// using TYEntities(ObjectContext)。
/// </summary>
public static TYEntities Current
{
get
{
// HttpContext datacontext
var result = TYEntities.ForWebRequest;
if (result != null)
return result;
// TYEntities
if (_current == null)
_current = new TYEntities();
return _current;
}
}
/// <summary>
/// TYEntities(ObjectContext)
/// </summary>
public static void Cleanup()
{
if (HttpContext.Current != null)
{
var result = HttpContext.Current.Items[ContextKey] as TYEntities;
if (result != null)
result.Dispose();
HttpContext.Current.Items[ContextKey] = null;
}
else if (_current != null)
{
_current.Dispose();
_current = null;
}
}
protected override void Dispose(bool disposing)
{
bool disposed = Disposed;
Disposed = true;
if (!disposed)
Cleanup();
base.Dispose(disposing);
}
#endregion
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JSP| 💔MVC 패턴을 이용한 게시판Model(대부분 java): DB에서 추출이나 수정하여 Controller View (대부분 JSP파일): 화면,UI Controller: 요청을 담당 시간이 없을 때, 만드는 게 급선무: 10년전, 요즘 잘 사용...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.