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