0

次のコードがあります

private void DoAddPropertyType()
{
    var ctx = Globals.DbContext;
    var propType = new PropertyType()
    {
        ID = Guid.NewGuid(),
        Name = "NewType",
        Description = "New Property Type",
        ModifiedDate = DateTime.Now
    };
    ctx.AddToPropertyTypes(propType);
    PropertyTypes.Add(propType);
}

Globals.DbContext起動時に開始された objectcontext への静的参照を提供します。何らかの理由で、ctx.AddToPropertyTypes(propType);ビットはエンティティをコンテキストに追加しません。その行の後にブレークポイントを設定してctx.PropertyTypesエンティティ セットを参照すると、存在しません。何か案は?

EDIT 1: and ステップのctx.SaveChanges()後にa を追加するctx.AddToPropertyTypes(propType)と、実際の追加は SaveChanges が実行されたときにのみ発生するように見えます。ただし、保存する前に最初にオブジェクトを検証し、エンティティ セット内のエンティティを反復処理したいので、これは私の要件には合いません。代替アプローチを知っている人はいますか?

4

1 に答える 1

1

それがあなたの問題のポイントです。ctx.PropertyTypesこれは実際のコレクションではありません。これはデータベースへの入り口であり、「ブラウジング」は実際には、新しいオブジェクトがまだ保存されていないデータベースへのクエリを実行します。最初に保存せずにコンテキストに追加された新しいオブジェクトを見つけたい場合は、ObjectStateManager:内のオブジェクトを検索する必要があります。

var entity = ctx.ObjectStateManager
                .GetObjectStateEntries(EntityState.Added)
                .Where(e => !e.IsRelationship)
                .Select(e => e.Entity)
                .OfType<PropertyType>()
                .SingleOrDefault(p => p.ID == ...);
于 2013-02-26T10:45:06.997 に答える