2012-01-13 4 views
3

Entity Framework 4.1 code first을 사용하여 기존 데이터베이스에 연결합니다. 내가 처음 사용하는 테이블은 Bank입니다. 도메인 모델로 Bank class도 있습니다. 에기존 데이터베이스 테이블에 매핑

내가 문제가 있어요
public class Bank 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
} 

내가 원하는 :

public class HbfContext : DbContext 
{ 
    public DbSet<Bank> Banks { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
      modelBuilder.Entity<Bank>().ToTable("Bank"); 
    } 
} 

내 은행 테이블 :

내 은행 클래스는 다음과 같습니다
BankID INT 
BankName VARCHAR(50) 

이것은 내가 내 클래스와 테이블을 매핑하는 방법입니다 모든 은행을 돌려 보내라.

return db.Banks 
    .OrderBy(x => x.Name); 

은 다음과 같습니다 :

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Name] AS [Name], 
    [Extent1].[IsActive] AS [IsActive] 
FROM 
    [dbo].[Bank] AS [Extent1] 
ORDER BY 
    [Extent1].[Name] ASC 

이 내 표는 ID, 이름 및이 isActive 열이 없기 때문에 작동하지 않을 SQL 문에서 반환. 어떻게하면이 문제를 해결할 수 있을까요? 그리고 EF가 BankId를 Id 및 BankName에 자동으로 매핑합니까?

답변

5

IsActive 속성을 무시하고 다른 속성을 매핑하도록 EF에 지시해야합니다. 당신이 데이터를 주석을 좋아하지 않는 경우에 당신은 유창하게 API를 사용하여이 작업을 수행 할 수 있습니다

modelBuilder.Entity<Bank>().Ignore(b => b.IsActive); 
modelBuilder.Entity<Bank>().Property(b => b.Id).HasColumnName("BankID"); 
modelBuilder.Entity<Bank>().Property(b => b.Name).HasColumnName("BankName"); 
+0

내 테이블 구조에서 볼 수있는 ID 및 이름 열이 없습니다. 따라서 도메인 모델의 속성을 변경하는 대신 유창한 API를 통해 열 이름을 속성에 매핑하는 것이 현명한 방법일까요? –

+0

나는이 부분을 놓쳤다. 클래스 선언이 테이블과 다른 경우 모든 차이점을 매핑해야합니다. 샘플을 수정했습니다. –

2

하려고이 isActive 속성에 다음과 같은 속성을 추가하고 할 수 있는지

[NotMapped] 

UPDATE

대신 잡고

IMO 사용하는 것이 더 쉽습니다 유창한 API의 사용 데이터 주석

우선 컨텍스트 클래스에서 OnModelCreating 함수를 제거하십시오.

그런 다음 이 예상대로 작동해야이

[Table("Bank")] 
public class Bank 
{ 
    [key] 
    public int Id { get; set; } 
    [Column("BankName")] 
    public string Name { get; set; } 
    [NotMapped] 
    public bool IsActive { get; set; } 
} 

같은 모델을 정의

+1

나는 선택의 열 이름이 테이블의 열 이름이 일치하지 않는 경우이 도움이 될 것입니다 볼 수 없습니다. –

+0

이것은 해당 속성을 매핑 할 필요가없고 데이터베이스에 존재하지 않는다는 것을 나타 내기위한 것입니다. 시도해보십시오. 문제가 해결 될 것입니다. –

+0

다른 작업은 Name 속성을 변경하는 것입니다 'BankName'에 해당 열과 일치하는지 확인하십시오 –

0

당신은 당신의 기존 테이블 사람들을 예를 들어, 일치하는 속성 이름을 매핑 System.ComponentModel.DataAnnotations를 사용할 수 있습니다

[Column("BankID")] 
    [Required] 
    public string Id 
     { 
     get; 
     set; 
     } 
+0

유창한 API를 통해이 작업을 수행 할 수 있습니까? –

+0

네, 그렇게 생각합니다. modelBuilder.Entity () .Property (bank => bank.ID) .HasColumnName ("BankID"); DbContext OnModelCreating 재정의. –

+0

코드 스타일이 매우 어색해 보인다 – Thomas

관련 문제