我面临一个需要防止直接创建实体对象的场景。
我正在使用代码优先。我想在某个地方有一个方法,我应该能够使用它来创建对象。有什么常用的做法吗?
EF 可以与具有私有/受保护构造函数的实体一起使用。
所以让我们来看看这个示例上下文:
public class MyEntity
{
protected MyEntity() { }
public int Id { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
}
然后创建一个实体new MyEntity()
会导致编译错误。
但是您仍然可以使用DbSet.Create myContext.MyEntities.Create();
通过 EF 创建实体,并且所有其他操作MyEntity
都将按预期工作,例如查询和更新等。
当然你也可以有一个静态工厂方法MyEntity
来管理对象的创建
public class MyEntity
{
//...
public static MyEntity MyCreate()
{
return new MyEntity();
}
}