在使用Entity Framework代码优先创建数据库时,可以从代码中提取许多数据库模型.Fluent API和/或Attributes可用于微调模型.
与数据注释相比,Fluent Api有哪些优缺点?换句话说:即使在某些情况下可以使用这两种方法,在一种情况下,一种方法应该优先于另一种方法吗?
在我首先设计一些Entity Framework应用程序之前,我只看了几个网络广播.我真的没有阅读那么多文档,我觉得我现在正在为此而痛苦.
我一直List<T>在我的课堂上使用,而且效果很好.
现在我已经阅读了一些文档,并说它应该一直在使用ICollection<T>.我改为这个,它甚至没有导致模型上下文改变.这是因为兼并List<T>和ICollection<T>继承IEnumerable<T>,这是EF实际需要的吗?
但是,如果是这种情况,为什么EF文档没有声明它需要IEnumerable<T>而不是ICollection<T>?
在任何情况下,我做了什么都有任何缺点,或者我应该改变它?
如果我在我的模型中声明实体关系为虚拟,则不需要Include在我的LINQ查询中使用该语句,对吧? -
例如:这是我的模型类:
public class Brand
{
public int BrandID { get; set; }
public string BrandName { get; set; }
public string BrandDesc { get; set; }
public string BrandUrl { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,对于上面的模型类,我不需要使用var brandsAndProduct = pe.Brands.Include("Products").Single(brand => brand.BrandID == 22);.
相反,我可以使用简单的var brandsAndProduct = pe.Brands.Where(brand => brand.BrandID == 22);,我将在访问时自动使相关实体可用.
我的理解是正确的吗?
另外,请告诉我在什么情况下我应该更喜欢一个?
我在EF 6.x中使用了以下POCO类.
我的问题:为什么"博客"实体下的"帖子"的导航属性被声明为虚拟?
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Tags { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)