2011-10-06 83 views
1

我有2个实体,每个实体都有一个相关的c#类。我在表上设置了导航属性表A以包含对表B中的许多项目的引用。当我做一个新的表A类对象我需要能够创建收集表B对象在表A。如何在表A c#class中设置导航属性?在c#类中实现导航属性

数据模型: http://bluewolftech.com/mike/mike/datamodel.jpg

+0

哪个EF的版本,您使用的?你使用Code First吗?你有模型/图表吗? – CodingGorilla

+0

EF 4.0。是先使用代码,然后使用数据模型的edmx文件。 – MBU

+2

如果您使用的是EDMX,则不会先使用代码。第一个代码只是用属性装饰的POCO类。 – CodingGorilla

回答

1

导航性能是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

+0

即时获取“所需属性'Foo'在类型'MyNamespace.Bar'上不存在。在Bar类中,我有一个属性public virtual Foo Foo { get; set;}在edmx文件中的实体模型中,Bar实体上有一个导航属性,它是Foo的一个实例,你知道那个错误可能是什么吗? – MBU

+0

@MBU如果你展示你的实体我会有一个更好的主意。 – shuniar

+0

如果OP使用EDMX,这会有什么帮助吗? –