EF采用Code First选择注解(Data Annotations)还是API(Fluent API)

EF采用Code First选择注解(Data Annotations)还是API(Fluent API)

3018发表于2015-07-19

我们在使用EF的Code First开发项目的时候最学用的就是采用注解(Data Annotations)方式定义Model。比如:

public class MSys_Admin
{
	public System.String UID { get;set; }
	
	[DisplayName("名称")]
	public System.String Name { get;set; }

	[DisplayName("登录名")]
	public System.String LoginName { get;set; }

	[DisplayName("密码")]
	[Column("Password")]
        public System.String Pwd { get;set; }
	public System.DateTime CreateTime { get;set; }
}

但是我最近在看一些开源的项目时发现很多都是采用API(Fluent API)。所有能通过DataAnnotations配置都可以通过Fluent API来实现。但是通过Fluent API配置不一定通过DataAnnotations能实现。因此Fluent API更加灵活更加强大,当然也会显得复杂。下面列举一些只有通过Fluent API才能实现的功能。

1、级联删除.WillCascadeOnDelete(false)

2、指定一个在model中不存在外键。.Map(conf => conf.MapKey("MyForeignKeyID"))

3、定义一些复杂的关系:一对多、多对多等等。.WithMany(...), WithOptional(...), WithRequiredDependent(...), WithRequiredPrincipal(...)

4、定义一些model对象和数据库表中的继承关系。.Map<TDerived>(Action<EntityMappingConfiguration<TDerived>> ...)

总结:在一些比较小,比较简单的项目对于我们来说使用注解(Data Annotations)已经完全够用了。我们都知道使用注解(Data Annotations)的方式时,是要遵守一定的命名规则的,比如model和table名字,字段和属性名字要对应。如果你不想改变这些约定命名规则,或者你的项目要用上一些Fluent API独有高级特性,这时就需要用上EF Code First的Fluent API。

小编蓝狐