外部パッケージが具象クラスではなくインターフェースにのみアクセスしてプログラムできるようにするために、dbセットを内部に設定したい
例えば
namespace Domain
{
public interface IProduct
{
string Description { get; }
int Id { get; }
decimal Price { get; }
}
}
//Separate Person.cs file for custom logic
namespace Domain
{
internal partial class Product :IProduct
{
}
}
internal partial class POS : DbContext
{
public POS()
: base("name=POS")
{
}
internal DbSet<Product> Products { get; set; }
}
//The other Person.cs file is generated by the .tt file
//_context.People is null which caused the dreaded null pointer exception :(
var people = _context.People.ToList();
モデル ブラウザーを介して Person クラスと People エンティティ セットへのアクセスをパブリックに設定するとすぐに、再び機能しますが、パッケージのカプセル化のために内部へのアクセスを制限したいと考えています。
VS2010 EF の Context では機能しましたが、VS2012 の DbContext では機能しませんでした。
どんな助けでも大歓迎です:}
PS
今のところ、以下のように .tt ファイルを編集しました
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
Products = Set<Product>();
これにより、セットをインスタンス化するコンテキスト クラスが以下のように生成されます。モデル内のすべてのエンティティ セットに対して、これを .tt ファイルに追加する必要がなくなると便利です。
internal partial class POS : DbContext
{
public POS()
: base("name=POS")
{
Products = Set<Product>();
}