包括/排除类型
包括在模型中的一个类型意味着,EF有关于该类型的元数据,并将尝试从/到数据库的读取和写入实例。
在这个文章中:
包括/排除类型
公约
数据注解
Fluent API
公约
通过规则,暴露在你上下文的DbSet属性里的类型被包含在你的模型里。此外,在OnModelCreating方法提到的类型也包括在内。最后,通过递归地探索发现的类型的导航属性所发现的任何类型也包括在模型中。
例如,以下的代码列出了所有三种被发现的类型:
Blog是因为它对上下文的DbSet属性暴露。
Post因为它是通过Blog.Posts导航属性被发现的。
AuditEntry因为它被在OnModelCreating方法里提到的。
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AuditEntry>();
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public Blog Blog { get; set; }
}
public class AuditEntry
{
public int AuditEntryId { get; set; }
public string Username { get; set; }
public string Action { get; set; }
}
数据注解
你能使用数据注解来从模型里排除一个类型
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public BlogMetadata Metadata { get; set; }
}
[NotMapped]
public class BlogMetadata
{
public DateTime LoadedFromDatabase { get; set; }
}
Fluent API
你能使用Fluent API从模型里排除一个类型。
class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Ignore<BlogMetadata>();
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public BlogMetadata Metadata { get; set; }
}
public class BlogMetadata
{
public DateTime LoadedFromDatabase { get; set; }
}