문제

지금 LINQ to SQL 가 더 성숙한 알고 싶의 어떤 위해 사람들이 사용하는 기술을 만들 n-계층화된 솔루션을 사용하여 기술하기 때문에,그것은 보이지 않는다는 명백한다.

도움이 되었습니까?

해결책

LINQ to SQL 정말 없는 n-tier 이야기를 나는 본 적이기 때문에,개체는 생성에서 만들어 클래스의 나머지와 함께,당신은 정말 없는 어셈블리할 수 있는 멋지게 참조를 통해 무언가가 다음과 같이 웹 서비스 등을 이용하실 수 있습니다.

유일한 방법은데 그것을 고려하여 매핑되는 데이터를 가져와,다음을 채우기 중간 데이터 모델을 통과,그를 통해,그리고 그것을 참조하 양쪽에서,그리고 사용하는 클라이언트 측면 다음을 전달하시를 밀어 데이터에 다시 새로운 매핑되거나 intellgently 업데이트하는 행한 후에 당신은 다시 한번 접속한다.

그의 이해하고 있다면 당신이 무엇을 얻으려고서:\

나는 ScottGu 동일한 질문에 그의 블로그를 처음 시작했을 때 그것을 보고-그러나 나는 보지 못한 하나의 시나리오나 앱 야생에서 사용하는 LINQ to SQL 이 방법입니다.웹사이트 롭 코너의 점포를 가까이 있는 공급자에게 문의하십시오.

다른 팁

Hm, 록퍼드 Lhotka 픈,는 LINQ to SQL 는 멋진 기술에 대한 데이터를 가져오는 데이터베이스에서.그가 제시하는 나중에 그들은 해야하는 것에 바인딩하"도메인을 도달 개체"(aka.CSLA objetcs).

심각하게 말하기,LINQ to SQL 했다 그것은 지원을 위한 다양한 계층 건조 매핑되는.업데이트 방법입니다.

할 수 있으로 보고 ADO.Net Framework 엔티티 에 대한 대안으로 LINQ to SQL,비록 그것이 지원하지 않 LINQ 니다.믿 LINQ to SQL 설계를 상당히 가볍고 간단하는 반면,엔티티 프레임워크가 더 무거운 의무 및 아마상에서 적당한 큰 기업 응용 프로그램.

OK,I am going to give myself 하나의 가능한 솔루션입니다.

삽입 업데이트/지 않았 문제점;할 수 있는 포장은 비즈니스 논리에 저장/업데이트 방법;예:

public class EmployeesDAL
{
    ...
    SaveEmployee(Employee employee)
    {
        //data formatting
        employee.FirstName = employee.FirstName.Trim();
        employee.LastName = employee.LastName.Trim();

        //business rules
        if(employee.FirstName.Length > 0 && employee.LastName.Length > 0)
        {
            MyCompanyContext context = new MyCompanyContext();

            //insert
            if(employee.empid == 0)
             context.Employees.InsertOnSubmit(employee);
            else
            {
              //update goes here
            }

            context.SubmitChanges();


        }
        else 
          throw new BusinessRuleException("Employees must have first and last names");
     }
 }

를 위한 데이터를 가져오는,또는 적어도 가져오는 데이터의에서 오는 하나 이상의 테이블 스토어드 프로시저를 사용할 수 있습이나 보기 때문에 결과하지 않는 익명으로 그렇게 반환할 수 있습니다 그들에게 외부에서 방법입니다.예를 들어,사용하여 저장 proc:

    public ISingleResult<GetEmployeesAndManagersResult> LoadEmployeesAndManagers()
    {
        MyCompanyContext context = new MyCompanyContext();

        var emps = context.GetEmployeesAndManagers();

        return emps;
    }

심각하게 말하기,LINQ to SQL 했다 그것은 지원을 위한 다양한 계층 건조 매핑되는.업데이트 방법

의 일부를 무엇을 읽었는 비즈니스 로직 랩에 매핑되는 즉 당신 랩에서 업데이트 방법을 제안합니다.

방법은 전통적으로 쓰는 사업체를 나는 일반적으로 캡슐화하"드 방법"보라그래서 내가 있을 수 있습 방법이라는 LoadEmployeesAndManagers 목록을 반환하는 직원들의 즉시 관리자(이 예제의).어쩌면 그냥 나만 내 프런트 엔드 오히려 보자.LoadEmployeesAndManagers()일부보다 긴 LINQ 문입니다.

어쨌든,LINQ 를 사용하는 것 아마 다음과 같이(지 확인에 대한 구문을 정확성):

var emps = from e in Employees
                join m in Employees
                on e.ManagerEmpID equals m.EmpID
                select new
                          { e,
                            m.FullName
                          };

이제 내가 이해하는 일을 제대로 넣으면 이에서 말하는 클래스 라이브러리 및 전화기에서 그것을 내 앞 end,유일한 방법을 반환 할 수 있습이페이,그래서 내 강력 장점이다.유일한 방법은 나를 반환할 수 있는 강력한 형식의체를 만들 수 있는 내 자신의 직원 종류(플러스 문자열 분야에 대한 관리자 이름)이며 그것을 채우기에서의 결과를 내 LINQ to SQL 문면 돌아갑니다.하지만 이것은 직...정확히 무엇을 했 LINQ to SQL 사이 있는 경우는 모든 일을 할까요?

나는 생각한 될 수 있다는 것을 잘못된 길;어떤 깨달음에 평가될 것입니다.

"유일한 방법을 반환 할 수 있습이페이,그래서 내 강력한 형식의 선하심"

는 것은 잘못된 것입니다.사실 당신의 쿼리가 강하게 입력,그것은 익명 형식입니다.나는 생각한 쿼리를 당신이 원하는 더 많은 다음과 같:

var emps = from e in Employees
            join m in Employees
            on e.ManagerEmpID equals m.EmpID
            select new Employee
                      { e,
                        m.FullName
                      };

는 반환됩니다페.

문서 썼습니다.

Linq-to-sql is an ORM.그것은 영향을 미치지 않는 방식으로 설계할 N-응용 프로그램 계층.당신이 그것을 사용하는 것과 같은 방법으로 사용하여 다른 모든 ORM.

@liammclennan

는 반환됩니다페....Linq-to-sql is an ORM.그것은 영향을 미치지 않는 방식으로 설계할 N-응용 프로그램 계층.당신이 그것을 사용하는 것과 같은 방법으로 사용하여 다른 모든 ORM.

다음 난 아직도 혼란이다.Yes,Linq-to-Sql is an ORM;하지만 지금까지 말할 수 있는 내가 여전히 쓰레기 내 프런트 엔드 코드와 함께 인라인 sql 형식 문(linq,지 sql....하지만 아직도 나는 느낌을 이해야한 추상화에서 멀리 프런트 엔드).

나는 랩 LINQ 문 우리가 사용하는 예로서 방법입니다.멀리로 말할 수 있는 유일한 방법은 나는 그것을 반환 할 수 있습은 이 방법:

public class EmployeesDAL
{
    public IEnumerable LoadEmployeesAndManagers()
    {
            MyCompanyContext context = new MyCompanyContext();

            var emps = from e in context.Employees
            join m in context.Employees
            on e.ManagerEmpID equals m.EmpID
            select new
                      { e,
                        m.FullName
                      };

            return emps;
    }

}

내 프런트 엔드 코드가 나는 다음과 같은 것이 가능합니다.

EmployeesDAL dal = new EmployeesDAL;
var emps = dal.LoadEmployeesAndManagers();

이 코스의 반환합니다페;그러나 나는 사용할 수 없습니다 이 같은 다른 어떤 ORM 같은 당신이 말한(하지 않는 물론 제가 오해하)기 때문에,나는 할 수 없습니다(다시,이것은 예제):

txtEmployeeName.Text = emps[0].FullName

이것은 무엇을 의미하는"내가 잃을 강력 장점이다." 나는 생각하기 시작하고 동의 도가니;는 LINQ-to-SQL 사용하도록 설계되지 않았습니다 방법이 사용될.다시지 않으면 나는 일을보고 올바르게,누군가가 나에게 보여 방법:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top