在c#类中实现导航属性
问题描述:
我有2个实体,每个实体都有一个相关的c#类。我在表上设置了导航属性表A以包含对表B中的许多项目的引用。当我做一个新的表A类对象我需要能够创建收集表B对象在表A。如何在表A c#class中设置导航属性?在c#类中实现导航属性
答
导航性能是EF简单。下面的例子显示了一个导航属性是什么样子:
public class Foo
{
public int FooId { get; set; }
public string SomeProperty { get; set; }
public virtual IEnumerable<Bar> Bars { get; set; }
}
其中Foo
代表TABLEA和Bar
代表tableB的。他们关于导航属性的关键词是虚拟的,默认启用延迟加载。假设您使用的是EF4.1 Code First。
编辑
关闭我的头顶,这应该是一个很好的起点模板您:
public class PointOfInterestContext : DbContext
{
public IDbSet<PointOfInterest> PointOfInterest { get; set; }
public IDbSet<POITag> POITag { get; set; }
public IDbSet<Tag> Tag { get; set; }
public override OnModelCreating(DbModelBuilder modelBuilder)
{
// custom mappings go here
base.OnModelCreating(modelBuilder)
}
}
public class PointOfInterest
{
// properties
public int Id { get; set; }
public string Title { get; set; }
// etc...
// navigation properties
public virtual IEnumerable<POITag> POITags { get; set; }
}
public class POITag
{
// properties
public int Id { get; set;}
public int PointOfInterestId { get; set; }
public int TagId { get; set; }
// navigation properties
public virtual PointOfInterest PointOfInterest { get; set; }
public virtual Tag Tag { get; set; }
}
public class Tag
{
// properties
public int Id { get; set; }
public string TagName { get; set; }
// etc...
// navigation properties
public virtual IEnumerable<POITags> POITags { get; set; }
}
那么你会实现你的业务对象的其他逻辑。实体应该是轻量级的,至多应该有数据属性。尽管如此,我更愿意通过OnModelCreating使用流畅的映射。
这里有一些很好的参考:
MSDN - EF 4.1 Code First
Code First Tutorial
哪个EF的版本,您使用的?你使用Code First吗?你有模型/图表吗? – CodingGorilla
EF 4.0。是先使用代码,然后使用数据模型的edmx文件。 – MBU
如果您使用的是EDMX,则不会先使用代码。第一个代码只是用属性装饰的POCO类。 – CodingGorilla