2

EntityFramework 4.3 と POCO の使用。モデルのプロパティが無視されているかどうかを確認するにはどうすればよいですか。

私のDBContextクラス階層では、プロパティを無視しています

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

私の BaseContext クラスでは、そのプロパティが無視されているかどうかを確認する必要があります。

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

どうやってやるの?

ありがとう

4

1 に答える 1

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 を新規作成します。1 つのレコードを作成し、関連する DbSet に追加します。CurrentValues.PropertyNames で DbEntityEntry を取得します。そこにあなたの財産はありますか?

    [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; }
}
于 2013-12-08T19:20:32.190 に答える