如何在企业应用程序中使用Entity Framework

San*_*say 2 c# asp.net ado.net database-design entity-framework

我有一些关于如何在企业应用程序中使用实体框架的问题.

首先,我使用ADO.NET已有很多年了,我使用对象来反映从数据库提供程序获得的数据.每次我想要更改某些内容或在数据库中插入内容.

我只是调用Save()方法并完成工作.每个对象都有一个DatabaseManager管理层的查询DataAccess.例如

public class Article{
   public int ID{get;set;}
   public string Title{get;set;}
   .....
   public bool Save(){
         if(this.ID == -1){
            return new ArticleDatabaseManager().InsertArticle(this);
         }else{
            return new ArticleDatabaseManager().UpdateArticle(this);
         }
   }
}
public ArticleDatabaseManager : DatabaseManager
{
   ...ADO.NET code
}
Run Code Online (Sandbox Code Playgroud)

我不知道我是否必须使用相同的架构或改变我在我的应用程序中使用此对象的所有方式.

我想如果我创建类似上面的东西我可以做这样的事情:

public class Article{
   public int ID{get;set;}
   public string Title{get;set;}
   .....
   public bool Save(){
         if(this.ID == -1){
            return new ArticleDatabaseManager().InsertArticle(this);
         }else{
            return new ArticleDatabaseManager().UpdateArticle(this);
         }
   }
}
Run Code Online (Sandbox Code Playgroud)

在每个DatabaseManager中实现一些链接到实体甚至EntitySQL来执行与旧DatabaseManager相同的工作.使用实体对象中的值填充业务模型.然后,我可以像以前一样使用业务,只要我想做一些更改,我通过EntityFramework与数据库进行通信.

我可以实现类似上面的东西吗?

难道我只是将以前的业务对象继承到实体对象?

EX:

  public class Article : ArticleEntity
  {
     //some properties for validation etc 
  }
Run Code Online (Sandbox Code Playgroud)

我可以使用完全不同的东西吗?我只是不知道:/

我没有其他ORM的经验.只是我手写的"ORM"系统.

非常感谢你.我很抱歉我缺乏英语,我知道我在一个问题上问得太多了......但是像我这样的恐龙从一种技术转移到另一种技术就像我改变了国家:/

Lad*_*nka 5

你至少尝试过使用一些EF教程吗?如果不是时候这样做是因为我们无法在单个答案中解释关于EF的所有内容(即使是多个 - 这不是替换教程和学习材料的SO的目的).这应该给你很清楚的答案,你所有与数据库管理员相关的东西.

一般来说,你所知道的是非常接近Active Record模式.如果您的对象还具有用于从数据库检索对象的静态方法,则它是Active记录模式.使用EF时,通常不使用此模式,也不需要任何数据库管理器.EF是围绕类构建的,称为上下文,此上下文作为您正在使用的所有实体的数据库管理器.可以向实体添加保存和检索方法,但因为它会破坏关注点的分离,并且它会使您的实体严重依赖于EF和持久性(趋势是使它们完全独立= POCO),它通常不会被使用.

不要从实体派生任何自定义类.EF将无法使用您的派生类型.使用EF中映射的实体作为您的类,并将所有自定义属性和方法直接添加到此类(如果您不想使用代码生成器,甚至可以从头创建该类).如果是生成的实体,您可以在部分类中添加自定义代码.如果不使用EF实体作为对象,则必须手动处理从一个到另一个的转换(或使用某些工具,如AutoMapper).

EF无法使用XML列 - 它将把它作为字符串处理.特别是如果您计划将这些数据用于某些排序或过滤,并且如果它们具有固定的结构,则应将它们建模为单独的表/实体.如果它只是结构化内容(具有动态结构),则可以将其用作XML字符串.