.NET MVC2018.05.16 10:30

Class 방식

using System.Web.Mvc;


namespace WebApplication.Helpers

{

    public static class HelperClass

    {

        public static string ExtensionMethod(this HtmlHelper helper)

        {

            return "call ExtensionMethod";

        }

    }

}


@using WebApplication.Helpers

@Html.ExtensionMethod()


참조(web.config 파일에 네임스페이스 등록시 @using WebApplication.Helpers 선언 없이 사용가능 )

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
      <add namespace="WebApplication.Helpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>


Inline 방식

@helper ExtensionMethodInineType(string message)

{

    @message

}

@ExtensionMethodInineType("call ExtensionMethodInineType")


App_Code 방식

App_Code 폴더 추가

@HelpersFromAppCode.AppCodeHelper("call App_Code helper")







Posted by James jangjeonghun
.NET MVC2018.05.15 10:18

RenderBody

In layout pages, renders the portion of a content page that is not within a named section.

사용법 : @RenderBody()


RenderPage

Renders the content of one page within another page.(Overrides WebPageRenderingBase.RenderPage(String, Object[]).)

사용법 : @RenderPage("~/Views/Home/RenderPage.cshtml", null)


RenderSection

In layout pages, renders the content of a named section.

사용법 : @RenderSection("scripts", required: false)

@section scripts

{

    <script>

        alert("RenderSection Test....");

    </script>

}


Posted by James jangjeonghun
.NET error2018.05.05 20:05

ASP.NET Entity Data Model을 사용하여 엔티티 객체를 생성한 후 "모델에서 데이터베이스 생성" 혹은 "데이터베이스에서 모델 업데이트" 기능을 사용하는대 이때 꼭 알아두어야 할 상항들을 정리해 보았다.!!!


1. "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 기존에 존재하던 데이터를모두 삭제한다. 왜나햐면 자동으로 생성된 DDL 명령문에는 "DROP TABLE" 명령어가 포함되어 있기 때문이다.


2. 기존에 존재하던 entity(엔티티)객체를 삭제하고 "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 기존에 존재하던 테이블(entity와 매핑되어 있던 테이블)이 삭제되지 않고 그대로 데이터베스에 존재한다.


3. 외래 참조키(FK)의 주키 테이블 정보를 수정,삭제하기 위해서는 외래 참조키(FK)를 사용한 모든 테이블에 외래 참조키(FK)를 해제해 주어야한다. ex) ALTER TABLE [dbo].[Word] DROP CONSTRAINT [FK_Word_Type] 그렇치 않을 경우 다음 메세지가 출력된다. ex) Could not drop object 'dbo.Type' because it is referenced by a FOREIGN KEY constraint. 그런대 문제는 "모델에서 데이터베이스 생성" 기능을 이용할 경우 자동으로 DDL이 생성이 되는대 이때 DDL명령어에 삭제한 entity(엔티티)객체와 매핑이 되는 데이터베이스 테이블 정보가 누락된다. 정리해서 말하면 기존에 존해하던 entity객체에 외래 참조키(FK)가 설정이 되어 있고 이 entity객체를 삭제할 경우 DDL명령에 외래 참키(FK)해제 명령어가 누락이된다는 것이다. 그래서 외래 참조키(FK)의 주키 테이블 정보를 수정,삭제할 수 없다.


4. entity(엔티티)객체와 테이블 매핑이 모호함, 함상 "모델에서 데이터베이스 생성" 기능을 이용해야만 entity(엔티티)객체와 테이블 정보가 매핑이된다.


sp. ASP.NET Entity Data Model에 대한 개인적인 의견을 몇자 적자면 가급적 "모델에서 데이터베이스 생성" 기능 보다는 "데이터베이스에서 모델 업데이트" 기능을 이용하기를 권장한다. 엔티티 프레임워크(entity framework)를 이용하여 엔티티를 생성한 후 "모델에서 데이터베이스 생성"기능 이용할 경우 위에서 언급한 것 이외의 많은 문제들이 있을것 같다. 사실 ASP.NET Entity의 가장 불편하것은 내가 작성한 entity framework의 엔티티들과 실 데이터베이스간의 동기화 문제이다. entity framework에서 작성한 엔티티 객체들이 실시간으로 실 데이터베이스와 동기화가 되는것이 아니기에 뭔가 모를 많은 부자연스러움이 있다. 어쩌면 이는 기술적인 하계일 수도 있다. 그리고 또한 entity framework는 개발자에 한해서 이용할 수 있는 기능이기에 다른 분야의 사람과(DB admin)과 협업이 부자연스럽다.

맞치 DB와 관련된 모든 업무를 개발자에게 떠넘기는 듯한 느낌이 든다. 이는 MS에서 뭔가 착각하고 있는건 아닌가 싶다. 사실 DB업무는 DB admin과 개발자가 협업을 통하여 업무를 진행하는 것인대 entity framework는 순전히 개발자에게 의존하는 경향이 있다.



Posted by James jangjeonghun

티스토리 툴바