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; }` ?