C# DbSet - 无法获取内部对象

10

我需要将一个实体切换为内部实体。因此,我创建了它。没有编译或运行时错误。但是,当我想要使用DbSet对象时,我不能使用它,因为该对象似乎未初始化!

我的ContextEntities:

public partial class Entities
{
   internal DbSet<Employee> EmployeeSet { get; set; }
}

我使用的方式是这样的:

Entities context = new Entities();
List<Employee> employees = context.EmployeeSet.ToList();

但是"EmployeeSet"是空的。我认为这是因为它在get中没有被实例化。如果我像这样使用public,它就可以工作:

public partial class Entities
{
   public DbSet<Employee> EmployeeSet { get; set; }
}

问题: 如果将DbSet标记为internal,它能够工作吗?如果可以,该如何实现?为什么会出现问题?(感谢Scott Stafford)


1
我猜问题是:如果一个DbSet被标记为internal,它能工作吗?如果可以,怎么做?为什么会出错?我想答案可能是因为“约定”要求它们必须是public,否则就无法正确连接相应的代码... - Scott Stafford
抱歉! :) 问题是:如果将DbSet标记为internal,它能工作吗?如果可以,怎么做?谢谢Scott。 - Sam
2个回答

24

如果未设置为public,它将不会自动实例化。您可以使用Set<TEntity>()方法手动实例化。

public partial class Entities
{
   internal DbSet<Employee> EmployeeSet { get; set; }

   public Entities()
   {
       EmployeeSet = Set<Employee>();
   }
}

你能帮我解决这个问题吗?链接在这里:http://stackoverflow.com/questions/7646182/c-dbset-internal-object-association-cannot-be-got - Sam
非常感谢Set<TEntity>!我一直在寻找一种初始化DbSet的方法。 - Yann Duran
四年后...但还是感谢您!最近我将所有的EF实体设置为internal(创建一个只有一个暴露类用于API的类库),并遇到了这个问题。由于我已经部分设置了DbContext(允许我动态设置连接字符串),所以这也是添加这些代码行来Set<>每个DbSet的完美位置。 - barbrady

2

我之前也遇到了同样的问题,只需要将getter设置为internal即可解决。

public partial class Entities
{
   public DbSet<Employee> EmployeeSet { internal get; set; }
}

1
虽然另一种方法更可取(使用内部get和公共setter?),但这个实际上是有效的,所以我支持它。对于那些不能使用已接受答案的人来说,这种替代方案可能很有用。 - SPArcheon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接