次の EF エンティティを検討してください。
public class Location
{
[Key]
public int LocationId { get; set; }
[StringLength(50)]
[Required]
public string LocationDescription { get; set; }
}
public class LocationHolding : Location
{
[StringLength(50)]
[Required]
public string LocationDescriptionHolding { get; set; }
}
コンテキストは次のものから派生しDbContext
、単一のDbSet
:
public IDbSet<Location> Location { get; set; }
パッケージを使用してEntityFramework.Extended
、バッチ更新を試みると、次のようになります。
context.Location
.OfType<LocationHolding>()
.Where(x => true)
.Update(u => new LocationHolding
{
LocationDescription = u.LocationDescriptionHolding
});
次の例外がスローされます。
There are no EntitySets defined for the specified entity type 'TestEfHierarchy.Model.LocationHolding'.
If 'TestEfHierarchy.Model.LocationHolding' is a derived type, use the base type instead.
Parameter name: TEntity
単純な単一のエンティティに対してパッケージで成功している間、これがより複雑な状況で使用されている例を見つけることができませんでした.
エンティティ階層については、table-per-hierarchy と table-per-type の両方が試行され、どちらも同じ結果になりました。私が見つけた唯一の状況は、静的な値 (つまり、LocationDescription = "Foo") で更新し、階層が TPH の場合です。
誰かが同様の経験をしたか、代替の回避策を見つけましたか? ストアド プロシージャなどの代替方法が利用可能であることを理解してください。ただし、コード ベースの流暢なアプローチを使用したいと考えています。