Entity Framework 4.1 코드에서 클래스 속성 무시하기


299

내 이해는 [NotMapped]현재 CTP에있는 EF 5까지는 속성을 사용할 수 없으므로 프로덕션에서 사용할 수 없다는 것입니다.

EF 4.1에서 속성을 무시하도록 표시하려면 어떻게해야합니까?

업데이트 : 나는 다른 이상한 것을 알았습니다. 내가 가지고 [NotMapped]작업에 속성을하지만, 어떤 이유로, EF 4.1은 여전히이 경우에도 데이터베이스에 배치이라는 이름의 열 생성 public bool Disposed { get; private set; }으로 표시됩니다 [NotMapped]. IDisposeable물론 클래스는 구현 하지만 그것이 어떻게 중요한지 모르겠습니다. 이견있는 사람?



그것은 Entity Framework 4.1에도 적용되어야한다고 생각합니다. 이 링크를 확인하십시오 : social.msdn.microsoft.com/Forums/eu/adodotnetentityframework/…
ilmatte

1
@SamLeach : 내 질문을 게시하기 전에 이미 그 질문을 읽었으며 해결책을 찾지 못했습니다. 문제는 EF4에서 어떻게 같은 것을 달성하는 것입니까? 그 게시물에서 뭔가를 놓쳤습니까?
Raheel Khan

그것이 EF 4.1을 가지고 있고 속성을 볼 수 있기 때문에 내가 생각한 것입니다. 그러나 EF는 내 응용 프로그램에서 완전히 무시하는 것이 매우 기쁩니다. 이는 MS Office Intrerop 응용 프로그램과 같은 COM 참조 유형뿐만 아니라 기본 및 참조 유형에도 적용됩니다.
Raheel Khan

미안하지만 지금은 간단한 응용 프로그램으로 테스트를 수행했으며 작동합니다. 샘플 코드를 제공 할 수 있습니까?
ilmatte

답변:


594

NotMapped속성 데이터 주석을 사용하여 특정 속성을 제외하도록 Code-First에 지시 할 수 있습니다.

public class Customer
{
    public int CustomerID { set; get; }
    public string FirstName { set; get; } 
    public string LastName{ set; get; } 
    [NotMapped]
    public int Age { set; get; }
}

[NotMapped]속성은 System.ComponentModel.DataAnnotations네임 스페이스에 포함됩니다 .

또는 클래스 에서 Fluent API재정의 OnModelCreating함수를 사용하여 이를 수행 할 수 있습니다 DBContext.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<Customer>().Ignore(t => t.LastName);
   base.OnModelCreating(modelBuilder);
}

http://msdn.microsoft.com/en-us/library/hh295847(v=vs.103).aspx

내가 확인 한 버전은 EF 4.3NuGet을 사용할 때 사용할 수있는 최신 안정 버전입니다.


편집 : 2017 년 9 월

ASP.NET 코어 (2.0)

데이터 주석

asp.net 코어 ( 이 문서 작성 당시 2.0 )를 [NotMapped]사용하는 경우 속성을 속성 수준에서 사용할 수 있습니다.

public class Customer
{
    public int Id { set; get; }
    public string FirstName { set; get; } 
    public string LastName { set; get; } 
    [NotMapped]
    public int FullName { set; get; }
}

유창한 API

public class SchoolContext : DbContext
{
    public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>().Ignore(t => t.FullName);
        base.OnModelCreating(modelBuilder);
    }
    public DbSet<Customer> Customers { get; set; }
}

3
감사. 그들 뒤에 노력으로 답변을 보는 것이 항상 좋습니다. 다른 답변을 올바른 것으로 표시하기 전에 실제로 마지막 줄을 알지 못했습니다. 귀하의 답변이 이전에 접수되었으므로 귀하의 답변을 올바른 것으로 변경하는 것은 공정하다고 생각합니다. @ilmatte는 신경 쓰지 않을 것이라고 확신합니다.
Raheel Khan

13
V5와> EF System.ComponentModel.DataAnnotations.Schema에서 이러한 지금 라이브의
Daveo

FluentMApping을 사용할 때 필드는 NULL을 알고 있지만 여전히 결과 집합에 반환됩니다. 반품하지 않으려면 어떻게해야합니까?
Rodney

8
[NotMapped]를 사용하면 다른 serializer (예 : JSON / XML)에게이 속성을 매핑하지 않도록 지시합니다. 데이터베이스 테이블에 대한 매핑 만 방지하고 시리얼 라이저가 속성에 액세스하도록하려면 OnModelCreating 접근 방식을 사용해야합니다.
maxmantz

내가 바로이 6+ 엔티티 프레임 워크에 상속 된 속성이 작동하지 않습니다 어떻게 알아 냈 havent 한 있지만 속성과 유창한 API는 명령을 무시하는 것
PBO

35

EF 5.0부터 System.ComponentModel.DataAnnotations.Schema네임 스페이스 를 포함해야 합니다.


2
이것은 여전히 ​​그렇습니까? 저는 EF 6.0을 사용하고 있으며 더 이상 프로젝트에 해당되지 않습니다. 이미 위의 어딘가를 참조하는 네임 스페이스를 참조하지 않는 한.
JARRRRG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.