Entity framework 如何排除EF 7中的属性?
我有下面的类型Entity framework 如何排除EF 7中的属性?,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我有下面的类型 public class Blog { public int BlogId { get; set; } public string Url { get; set; } } 我有以下的背景 public class MyContext : DbContext { public MyContext(DbContextOptions options) : base(options) { } public DbSet&l
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
}
我有以下的背景
public class MyContext : DbContext
{
public MyContext(DbContextOptions options)
: base(options)
{
}
public DbSet<Blog> Blogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Ignore(x => x.Url);
}
}
公共类MyContext:DbContext
{
公共MyContext(DbContextOptions)
:基本(选项)
{
}
公共数据库集博客{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().Ignore(x=>x.Url);
}
}
我正在尝试如何使用fluentapi排除属性。我假设当我们排除EF中某个类型的属性时,它将无法读取/保存该属性到数据库
在下面的代码示例中,我使用的是InMemory DB&have excluded Url属性
class Program
{
static void Main(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
optionsBuilder.UseInMemoryDatabase();
using (var db = new MyContext(optionsBuilder.Options))
{
var blog = new Blog { BlogId = 1, Url = "MyUrl" };
db.Blogs.Add(blog);
db.SaveChanges();
foreach (var item in db.Blogs)
{
Console.WriteLine(item.BlogId);
Console.WriteLine(item.Url);
}
Console.ReadLine();
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
var optionsBuilder=new DbContextOptionsBuilder();
optionsBuilder.UseInMemoryDatabase();
使用(var db=newmycontext(optionsBuilder.Options))
{
var blog=newblog{BlogId=1,Url=“MyUrl”};
添加(blog);
db.SaveChanges();
foreach(db.Blogs中的变量项)
{
Console.WriteLine(item.BlogId);
Console.WriteLine(item.Url);
}
Console.ReadLine();
}
}
}
在输出中,我可以看到EF能够读取并保存属性信息
您的代码是正确的。问题是您误解了代码和结果 您可以使用以下属性值创建
blog
对象:
var blog = new Blog { BlogId = 1, Url = "MyUrl" };
因此,这个对象在内存中,并由上下文跟踪。根据需要,上下文没有跟踪Url
属性,但该属性已经在内存中,在您的Blog
实例中
您的代码不会从此实例中删除或更改blog
对象或其url
。然后在控制台中显示它
没有什么奇怪的事情发生。但是您的代码没有测试Url
是否已保存到内存中的数据库
如果您想测试它,请尝试在一个新的blog
实例中从内存数据库中读取对象,在控制台中显示它,您将看到一个空的Url