在c#类中实现导航属性

发布于 2024-12-08 17:03:50 字数 377 浏览 3 评论 0原文

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

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

i have 2 entities each with a relating c# class. I set up a navigation property on table A to contain a reference to many items in table B. When i make a new table A class object i need to be able to create the collection of table B objects in table A. How do i set up the navigation property in the table A c# class?

DATAMODEL:
http://bluewolftech.com/mike/mike/datamodel.jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失退 2024-12-15 17:03:50

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。导航属性的关键字是 virtual,默认情况下启用延迟加载。这是假设您使用 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 代码优先 < br>
代码优先教程

Navigation properties are simple in EF. The example below shows how a navigation property would look:

public class Foo
{
    public int FooId { get; set; }
    public string SomeProperty { get; set; }

    public virtual IEnumerable<Bar> Bars { get; set; }
}

Where Foo represents tableA and Bar represents tableB. They key word for the navigation property is virtual which enables lazy-loading by default. This is assuming you're using EF4.1 Code First.

EDIT

Off the top of my head, this should be a good starting template for you:

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; }    
}

Then you would implement the other logic in your business objects. The entities are supposed to be lightweight and at most should have data attributes. I prefer to use the fluent mappings through the OnModelCreating though.

Here are a few good references:
MSDN - EF 4.1 Code First
Code First Tutorial

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文