2016-08-03 3 views
1

FirstOrDefault의 도움으로 엔티티 프레임 워크를 사용하여 테이블에서 데이터를 가져 오는 중했습니다. 컨트롤러 코드는 다음과 같다 : 테이블 이름 : 사용자 FirstOrDefault가 적절한 대답을 제공하지 않습니다

Table containing Table data and columns

지금 나는 그것이보기에 잘 데이터를 인쇄 많은 것들을 시도는 다음과 같이

public ActionResult getUser(MembershipModel model) 
{ 
    ProviderImplementation.Edmx.ProviderEntities providerEntities = new ProviderImplementation.Edmx.ProviderEntities(); 
    //var membershipModel = new MembershipModel(); 
    //var model = ProviderImplementation.Models.MembershipModel; 
    //bool isUserOnline = true; 
    if (!ModelState.IsValid) 
    { 
     var isValid = Membership.GetUser(model.UserName, true); 
     if (isValid != null) 
     { 
      var rowData = providerEntities.Users.Where(u => u.UserName.Equals(model.UserName)).FirstOrDefault(); 
      model.UserName = rowData.UserName; 
      model.Password = rowData.Password; 
      model.UserId = Convert.ToInt32(rowData.UserId); 
      model.RoleId = Convert.ToInt32(rowData.RoleId); 
      //var singleValue = providerEntities.Users.Find(model.UserName); 
      ViewBag.User = "Found"; 
     } 
     else 
     { 
      ViewBag.User = "Not Found"; 
     } 
    } 
    else 
    { 
     var error = ModelState.Values.SelectMany(v => v.Errors); 
     ModelState.AddModelError("NoModelError", error.ToString()); 
    } 
    return View(model); 
    } 

또한 내 테이블 데이터가 특정 레코드를 선택합니다.

이 문제는 여기에 있습니다 :
이 {잘 작동} -> 1.이 사용자 아이디 = 2가보기 보기 코드에서 잘 인쇄됩니다이 먼저 발생됩니다 나는이 "압바스"사용자 이름과 기록을 인출 할 때 :

<div style="margin-left: 200px;"> 
    <table cellpadding="10" cellspacing="10"> 
     <tr> 
      <th>Get User Details</th> 
     </tr> 
     <tr> 
      <th>@ViewBag.User</th> 
     </tr> 
     <tr> 
      <td>@Html.LabelFor(m => m.UserId)</td> 
      <td>@Html.LabelFor(m => m.UserName)</td> 
      <td>@Html.LabelFor(m => m.Password)</td> 
      <td>@Html.LabelFor(m => m.RoleId)</td> 
     </tr> 
     <tr> 
      <td>@Html.DisplayFor(Model=>Model.UserId)</td> 
      <td>@Html.DisplayFor(Model=>Model.UserName)</td> 
      <td>@Html.DisplayFor(Model=>Model.Password)</td> 
      <td>@Html.DisplayFor(Model=>Model.RoleId)</td> 
     </tr> 
    </table> 
</div> 

{문제} -> 2. I "는 압바스"사용자 아이디 다음 FirstOrDefault는 사용자 이름, 상기 데이터 (4)를 인쇄 = 갖는 = "압바스"제가 발생하여 인쇄가되지 않는 UserName의 이름과 기록을 가져올 때 =보기에서 "Abbas".

참고 : SingleOrDefault는 둘 이상의 인스턴스가 있음을 알리는 예외를 반환합니다.

업데이트 : 값을 변경하면 디버깅하는 동안 데이터베이스에서 완벽하게 인쇄됩니다.

+1

무엇이 문제입니까? –

+0

http://stackoverflow.com/help/how-to-ask를 읽고 질문을 편집하십시오. – MikeT

+0

확인을 눌러 필요에 따라 편집하십시오. –

답변

0

나는 이전 답변에 동의하므로 대소 문자를 구분하여 사용자 이름을 구별하는 시스템을 사용하지 않아야합니다. 이것은 구조가 잘못 설계되었음을 나타내는 기호이므로 시스템을 변경하는 것이 좋습니다. 예를 들어 사용자 테이블과 동일한 테이블에서 roleid를 볼 수 있습니다.이 테이블에서 여러 명의 대/소문자 구분을 사용하여 같은 사람의 서로 다른 역할에 대처할 수있는 방법으로 여러 로그인을 생성하는 경우 처리하는 방법이 훨씬 낫습니다 이것은 장기적으로 당신에게 훨씬 적은 슬픔을 유발할 것입니다. 그러나

, 당신이 시도 후 대소 문자 구분을 확인하려는 경우 :

var rowData = providerEntities.Users.FirstOrDefault(u => u.UserName == model.UserName && String.Compare(u.UserName, model.UserName,false) == 0); 

또한 다음 (DB 쿼리)을 시도 할 수 있습니다 :

var rowData = db.Users.ToList().Where(x => (string.Compare(x.UserName, model.UserName, false) == 0)).FirstOrDefault(); 

이것은 가정 당신의 사용자 클래스가 ' 사용자 '.

+0

나는 그저 결과를 알리려고 노력할 것이다. 그래, 나는 적절한 테이블 구조를 설계하는 것에 대한 조언을 받아 들여서 다른 테이블과 다른 프로젝트에서도 구현할 것이다. –

+0

아니요, 예상대로 작동하지 않습니다. 문자열 비교가 작동하지 않는다 –

+0

데이터베이스를 직접 쿼리하고 SQL 테이블이 대소 문자를 인식하지 않기 때문에 작동하지 않는다고 생각합니다. 그래서 데이터베이스에 직접 호출하는 호출을 사용하는 다른 가능한 솔루션으로 내 대답을 업데이트했습니다. 시도 해봐. – Rob

0

EF 뒤에있는 SQL 쿼리는 "abbas"/ "Abbas"와 구별되지 않습니다. SQL 프로파일 러를 실행하고 호출시 실행중인 쿼리를 확인하십시오.

+0

SQL 프로파일 러에 대해 간략하게 설명해 줄 수 있습니까? 내가 알고 싶습니다 –

+0

귀하의 데이터베이스가 SQL Server에서 호스팅되는 것으로 가정합니다. DB가 SQL Server에서 호스팅되는 경우 Microsoft SSMS는 "SQL 프로필러"라는 기능을 제공하여 데이터베이스에 대한 모든 쿼리 대상을 추적합니다. https://msdn.microsoft.com/en-in/library/ff650699.aspx –

+0

유용한 팁을 보내 주셔서 감사합니다. –

0

첫째, 사용자 이름에 대한 항목이 중복된다는 아이디어를 삭제해야합니다. 이렇게하면 직면하고있는 매우 기본적인 문제가 해결되고 사용자 계정 데이터를 유지하는 것이 좋습니다.

사용자 이름이 중복 될 수 있다고 주장하는 경우 FirstOrDefault을 대소 문자를 구분하여 검색하십시오. 코드 스 니펫을 사용해 볼 수 있습니까?

var rowData = providerEntities.Users.FirstOrDefault(u => u.UserName.Equals(model.UserName)); 
+0

작동하지 않습니다. FirstOrDefault는 여전히 "압바스"와 "압바스"를 구별하지 않습니다 .. 어휴! 나는 붙어 있습니다 !!하지만 FirstOrDefault는 대소 문자를 구분하는 아이디어가 충분합니다. –

관련 문제