我正面临一个需要阻止直接创建实体对象的场景。
我正在使用Code First。我想在某个地方只使用我应该能够创建对象的方法。有没有常用的做法?
答案 0 :(得分:1)
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()
创建实体将导致编译错误。
但您仍然可以通过EF DbSet.Create myContext.MyEntities.Create();
创建参与者,而MyEntity
上的所有其他操作都可以按预期查询和更新等。
当然,您还可以在MyEntity
上使用静态工厂方法来管理对象创建
public class MyEntity
{
//...
public static MyEntity MyCreate()
{
return new MyEntity();
}
}