2012-06-28 3 views
0

Я столкнулся со сценарием, в котором мне нужно предотвратить прямое создание объектов сущности.Entity Framework Предотвращение прямого создания POCO

Я использую Code First. Я хотел бы иметь метод где-то только с использованием которого я должен был бы создать объект. Существует ли какая-либо общепринятая практика для этого?

ответ

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() приведет к ошибке компиляции.

Но вы все же можете создать entites через EF с помощью DbSet.CreatemyContext.MyEntities.Create();, а все остальные операции на MyEntity будут работать, например. запросы и обновления и т. д., как ожидалось.

И, конечно, вы также можете иметь статический фабричный метод на MyEntity, который управляет созданием объекта

public class MyEntity 
{ 

    //... 

    public static MyEntity MyCreate() 
    { 
     return new MyEntity(); 
    } 
} 
Смежные вопросы