entity framework中是否不支持通用类作为模型?
我想做这样的事情:
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> AuditLog { get; set; } public DbSet LogChildren { get; set; } } public class AuditLog { public AuditLog() { Children = new List(); } [Key] public Guid AuditLogID { get; set; } public UserIdOrUserNameColumnType UserId { get; set; } [Required] public DateTimeOffset EventDateUTC { get; set; } }
但我猜不支持DbSet<AuditLog>
。 我收到此错误:
附加信息:未映射类型’TrackerEnabledDbContext.AuditLog`1 [System.String]’。 使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型。 validation类型是否已定义为类,不是原始类型还是通用类型,并且不从EntityObjectinheritance。
有什么方法可以实现public DbSet<AuditLog> AuditLog { get; set; }
public DbSet<AuditLog> AuditLog { get; set; }
public DbSet<AuditLog> AuditLog { get; set; }
?
您无法映射generics类型,因为entity framework根本不支持通用实体类型。 使用EF Code-First方法时,您需要记住,您应该在允许Entity Framework创建POCO代理的约束内对POCO类进行建模。
这意味着,很快就会说出这样一个类:
- 不应包含任何属性
- 不应该是通用的
- 应该是公开的
- 不得密封
- 一定不是抽象的
- 必须具有没有参数的公共或受保护构造函数
我一直在Entity Framework中成功使用generics类。 如果以下列方式声明您的类和DbSet,它将起作用。
public class AuditLogString : AuditLog{} public DbSet AuditLogStrings { get;set;}
[更新]我最近没有使用过这种方法,根据对这个答案的评论,我建议Pawel的回答。 但是我没有删除这个答案,因为我能够使用该方法。