实体框架阻止直接POCO创建

时间:2012-06-28 04:43:46

标签: entity-framework poco

我正面临一个需要阻止直接创建实体对象的场景。

我正在使用Code First。我想在某个地方只使用我应该能够创建对象的方法。有没有常用的做法?

1 个答案:

答案 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();
    }
}