Search code examples
c#entity-frameworkpocodbcontext

Entity Framework code first: How to ignore classes


This is similar to questions here and here, but those are old and have no good answers.

Let's say I have the following classes:

class HairCutStyle { 
   public int ID { get; set; }
   public string Name { get; set; }
}

class CustomerHairCutPreference {
   public int ID { get; set; }
   public Customer Customer { get; set; }
   public HairCutStyle HairCutStyle { get; set; }
}

Let's say my HairCutStyle data is stored in a table in another database (I get it from Paul Mitchell himself). I want to use the HairCutStyle class as a POCO class - something that I will use in code to represent hair cut styles, but I don't need to read/write that information in my database. (Assume I have a separate service layer that can populate the data for these classes from the other database.)

How can I tell EF NOT to create a HairCutStyle table in my current db context? But at the same time, I want to store a value in the CustomerHairCutPreference table that is a reference to the HairCutStyle data stored elsewhere. A "virtual" foreign key of sorts, that isn't constrained by an actual database FK constraint.


Solution

  • There are three things to ensure:

    1. Make sure you do not expose a DbSet<HairCutStyle> in your DbContext-derived class
    2. Make sure you do not have any mention of HairCutStyle in your OnModelCreating override
    3. Mark your HairCutStyle property using the NotMapped attribute.