Are generic classes not supported as models in Entity Framework?

asp.net, c#, database, entity-framework, orm

Solution

You cannot map the generic type because Entity Framework simply doesn't support generic Entity types. When using the EF Code-First approach you need to remember that you should model your POCO classes within the constraints that allow Entity Framework to create POCO proxies.

This means, shortly speaking that such a class:

- Should not contain any attributes

- Should not be generic

- Should be public

- Must not be sealed

- Must not be abstract

- Must have a public or protected constructor that does not have parameters

Problem

I am trying to do something like this : ``` public class TrackerContext : DbContext { public bool TrackNewValues { get; set; } public TrackerContext(bool trackNewValues = false) : base() { TrackNewValues = trackNewValues; } public TrackerContext(string connectinString, bool trackNewValues = false) : base(connectinString) { TrackNewValues = trackNewValues; } public DbSet<AuditLog<string>> AuditLog { get; set; } public DbSet<AuditLogChild> LogChildren { get; set; } } public class AuditLog<UserIdOrUserNameColumnType> { public AuditLog() { Children = new List<AuditLogChild>(); } [Key] public Guid AuditLogID { get; set; } public UserIdOrUserNameColumnType UserId { get; set; } [Required] public DateTimeOffset EventDateUTC { get; set; } } ``` But I guess `DbSet<AuditLog<string>>` is not supported. I get this error: Additional information: The type 'TrackerEnabledDbContext.AuditLog`1[System.String]' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive or generic, and does not inherit from EntityObject. Is there any ways I can implement `public DbSet<AuditLog<string>> AuditLog { get; set; }` ?

Original source