检查EntityFramework是否忽略了某个属性

时间:2013-02-08 13:16:59

标签: entity-framework entity-framework-4 entity-framework-4.3

使用EntityFramework 4.3 w / POCOs。 如何检查模型上的属性是否被忽略。

在我的DBContext类层次结构中,我忽略了

的属性
modelBuilder.Entity<EClass>().Ignore (f => f.IgnoredProperty());

在我的BaseContext类中,我需要检查是否忽略该属性。

private void ProcessGlobalConvention(DbModelBuilder modelBuilder, IGlobalConvention convention)
{
    modelBuilder.Entity<typeof(this.GetType())>("Ignored Property");
}

我该怎么做?

由于

1 个答案:

答案 0 :(得分:0)

使用EF电动工具http://www.infoq.com/news/2013/10/ef-power-tools-beta4查看您的型号。该物业在那里?

创建数据库。那列是吗?

查看Database.LogSqlEvents http://blog.oneunicorn.com/2013/05/08/ef6-sql-logging-part-1-simple-logging/并解析sql以查看字段名称是否显示...

....除非你真的想要一个代码解决方案......?

在哪种情况下

新建你的DbContext 创建一条记录并将其添加到相关的DbSet 获取DbEntityEntry 查看CurrentValues.PropertyNames。你的房产在那里吗?

    [TestMethod]
    public void CreateDatabase()
    {
        Database.SetInitializer(new DropCreateDatabaseAlways<HomesContext>());

        var db = new HomesContext();

        Assert.IsFalse(db.Homes.Any());

        var home = db.Homes.Create();

        db.Homes.Add(home);

        var entry = db.Entry(home);

        Assert.IsTrue(entry.CurrentValues.PropertyNames.Contains("MaxResidents"));
        Assert.IsTrue(entry.CurrentValues.PropertyNames.Contains("MaxStaff"));
        Assert.IsFalse(entry.CurrentValues.PropertyNames.Contains("CurrentResidents"));
        Assert.IsFalse(entry.CurrentValues.PropertyNames.Contains("CurrentStaff"));

    }
public class HomesContext:DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Home>().Ignore(x => x.CurrentResidents);

        base.OnModelCreating(modelBuilder);
    }
    public DbSet<Home> Homes { get; set; }
}

public class Home
{
    public int HomeId { get; set; }
    public string HomeName { get; set; }

    public int MaxResidents { get; set; }
    public int MaxStaff { get; set; }

    public int CurrentResidents { get; set; }

    [NotMapped]
    public int CurrentStaff { get; set; }
}