2017-12-27 23 views
0

Web Service을 만들 때 Entity Framework을 사용하고 있습니다. Entity 클래스는 DBContext입니다.모델이 데이터베이스에서 업데이트 된 후 엔티티 코드를 변경하지 않는 방법은 무엇입니까?

namespace ePdfExtractor.Entity 

public partial class MyDBEntities 
{ 
    public MyDBEntities(): 
      base(GetDecrptString()) 
    { 
    } 
    public static string DecrypConnectionString(string connectionString) 
    { 
     return EncDec.EVODecrypt(connectionString); 
    } 

    public static string EncodeConnectionString(string connectionString) 
    { 
     return EncDec.EVOEncrypt(connectionString); 
    } 

    private static string GetDecrptString() 
    { 
     string connString = ConfigurationManager.ConnectionStrings["MyEntitiesConnection"].ConnectionString; 
     return EncDec.EVODecrypt(connString); 
    } 
} 

때마다 내가 :

namespace ePdfExtractor.Entity 

public partial class MyDBEntities : DbContext 
{ 
    public MyDBEntities() 
     : base() 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

    public virtual DbSet<MyTable1> MyTable1 { get; set; } 
    public virtual DbSet<UserSvc> UserSvcs { get; set; } 
} 

이 내 엔티티 다른 부분 클래스 : 나는 context가 생성 될 때마다 암호 해독을 처리하는 로직을 쓴이 클래스에서

테이블을 쿼리해야하는데, MyDBEntities의 새 인스턴스를 만듭니다.

public partial class UserSvc 
{ 
    public static UserSvc Authenticate(string userName, string password) 
    { 
     using (var ctx = new MyDBEntities()) 
     { 
      UserSvc userObj = ctx.UserSvcs.FirstOrDefault(u => u.UserName == userName && u.Password == password && u.Active); 

      return userObj; 

     } 
    } 
} 

새로운 UserSvc 테이블을 생성 한 후 데이터베이스에서 모델을 업데이트 할 때이 클래스가 생성되고 생성자의 정의와 함께 해독 논리가 삭제됩니다.

어떻게 유지할 수 있습니까? 모델을 재생성 할 때마다이 클래스는 새 콘텐츠로만 업데이트됩니다. 가능한가요? 새로운 서명 호출 다음

namespace ePdfExtractor.Entity 

public partial class MyDBEntities 
{ 
    public MyDBEntities(string connectString): 
      base(GetDecrptString(connectString)) 
    { 
    } 

    public static string EVOConnectionString(string connectionString) 
    { 
     return ConfigurationManager.ConnectionStrings["MyEntitiesConnection"].ConnectionString; 
    } 

    public static string DecrypConnectionString(string connectionString) 
    { 
     return EncDec.EVODecrypt(connectionString); 
    } 

    public static string EncodeConnectionString(string connectionString) 
    { 
     return EncDec.EVOEncrypt(connectionString); 
    } 

    private static string GetDecrptString(string connString) 
    { 
     return EncDec.EVODecrypt(connString); 
    } 
} 

:

using (var ctx = new MyDBEntities(MyDBEntities.EVOConnectionString)) 
{ 
    UserSvc userObj = ctx.UserSvcs.FirstOrDefault(u => u.UserName == userName && u.Password == password && u.Active); 

    return userObj; 

} 

또한 해킹이 부분을 강제로 할 수있는 :

+0

[부분 클래스] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods)로 생성됩니다. 그래서 거기에 논리를 옮기세요. –

+0

내 프로젝트에서 단지 하나의 부분 클래스'MyDBEntities' 만 볼 수 있습니다. – Yev

+0

오른쪽 생성 된 코드를 보유하기 위해 다른 클래스를 추가해야합니다. https://stackoverflow.com/questions/42160958/how-to-extend-an-entity-framework-6-1-3-generated-class –

답변

0

당신은 부분 클래스의 다른 서명 필요
namespace ePdfExtractor.Entity 

public partial class MyDBEntities 
{ 
    public MyDBEntities(string dummy): 
      base(GetDecrptString()) 
    { 
    } 
    public static string DecrypConnectionString(string connectionString) 
    { 
     return EncDec.EVODecrypt(connectionString); 
    } 

    public static string EncodeConnectionString(string connectionString) 
    { 
     return EncDec.EVOEncrypt(connectionString); 
    } 

    private static string GetDecrptString() 
    { 
     string connString = ConfigurationManager.ConnectionStrings["MyEntitiesConnection"].ConnectionString; 
     return EncDec.EVODecrypt(connString); 
    } 
} 

다음 새 서명으로 전화하십시오 :

using (var ctx = new MyDBEntities("Dummy")) 
{ 
    UserSvc userObj = ctx.UserSvcs.FirstOrDefault(u => u.UserName == userName && u.Password == password && u.Active); 

    return userObj; 

}