Entity Framework 4.1 Kodunda bir sınıf özelliğini yoksayma


300

Anladığım kadarıyla, [NotMapped]öznitelik şu anda CTP'de bulunan EF 5'e kadar mevcut olmadığı için üretimde kullanamayız.

EF 4.1'deki özellikleri yok sayılmak üzere nasıl işaretleyebilirim?

GÜNCELLEME: Başka garip bir şey fark ettim. [NotMapped]Çalışmak için öznitelik aldım ama nedense EF 4.1 hala public bool Disposed { get; private set; }işaretli olsa bile veritabanında Disposed adlı bir sütun oluşturur [NotMapped]. Sınıf IDisposeableelbette uygular ama bunun nasıl olması gerektiğini görmüyorum. Düşüncesi olan var mı?



Bana öyle geliyor ki Entity Framework 4.1 için de geçerli. Bu bağlantıyı kontrol edin: social.msdn.microsoft.com/Forums/eu/adodotnetentityframework/…
ilmatte

1
@SamLeach: Kendi sorumu göndermeden önce bu soruyu zaten okudum ve bir çözüm bulamadım. Soru EF4'te aynı şeyi nasıl elde edeceğinizdir? Bu gönderide bir şey kaçırdım mı?
Raheel Khan

EF 4.1'e sahip olduğum ve bu özelliği görebildiğim için de düşündüm. Ancak EF, uygulamalarımda tamamen görmezden gelmekten oldukça mutlu görünüyor. Bu, MS office intrerop uygulamaları gibi yerel ve başvuru türlerinin yanı sıra com başvuru türleri için de geçerlidir.
Raheel Khan

Üzgünüm ama şu anda basit bir uygulama ile bir test yaptım ve işe yarıyor. Örnek kod verebilir misiniz?
ilmatte

Yanıtlar:


597

NotMappedBelirli bir mülkü hariç tutmak için Code-First'e talimat vermek için özellik verileri ek açıklamasını kullanabilirsiniz

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]özniteliği System.ComponentModel.DataAnnotations ad alanına dahil edilir .

Alternatif olarak bunu sınıfınızdaki Fluent APIgeçersiz kılma OnModelCreatingişleviyle yapabilirsiniz 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'i kullandığınızda mevcut olan en son kararlı sürüm olan kontrol ettiğim sürüm.


Düzenleme : SEP 2017

Asp.NET Core (2.0)

Veri açıklaması

Asp.net çekirdeği kullanıyorsanız ( bu yazı yazılırken 2.0 ), [NotMapped]özellik özellik düzeyinde kullanılabilir.

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

Akıcı 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
Teşekkürler. Cevapları arkasında gayretle görmek her zaman iyidir. Başka bir cevabı doğru olarak işaretlemeden önce son satırınızı fark etmedim. Cevabınız daha önce geldiğinden, sizinkini düzeltmek için sadece adil olduğunu düşünüyorum. Eminim @ilmatte aldırmaz.
Raheel Khan

13
EF v5> ile bunlar artık System.ComponentModel.DataAnnotations.Schema
Daveo

FluentMApping kullandığımda, alan yine de sonuç kümesinde NULL bilmesine rağmen döndürülür. İade edilmemesini nasıl sağlarım?
Rodney

8
[NotMapped] kullanılması, diğer serileştiricilere de (örneğin JSON / XML) bu özelliği eşlememelerini söyler. Yalnızca bir veritabanı tablosuna eşlemeyi önlemek, ancak yine de serileştiricilerin özelliğe erişmesini istiyorsanız, OnModelCreating yaklaşımını kullanmanız gerekir.
maxmantz

Ben nasıl tam olarak anladım rağmen, Bu varlık çerçeve 6 + kalıtım özellikleri ve akıcı api talimat görmezden gibi görünüyor ile
çalışmıyor

35

EF 5.0'dan itibaren System.ComponentModel.DataAnnotations.Schemaad alanını eklemeniz gerekir .


2
Hala böyle mi? EF 6.0 kullanıyorum ve bu artık en azından projem için geçerli değil. Yukarıda bir yere zaten referans veren bir isim alanına başvurmadıkça.
JARRRRG
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.