【问题标题】:Setting up a relation to another class with DbContext (Entity)使用 DbContext (Entity) 建立与另一个类的关系
【发布时间】:2014-02-25 21:04:30
【问题描述】:

我的上下文是这样的:Using Razor to create a form for hierarchy of domain models

我有一个类 Project 和一个名为 Projects 的数据库中的表。

在这个表中有一个名为AddressID的列...它与另一个地址表相关。

一个地址由几个属性组成...地址1、地址2、城市、国家、州。我已将它们映射到 Address 类中,以便与地址表相关。

项目因此通过 AddressID... 一个整数与 Address 表相关。

在我的项目课程中,出于某种原因,我认为我可以做到这一点:

class Project
{
    Address Address;
}

然后我意识到,当我去获取一个项目时 - 一个 int 列地址 ID(项目关系列) - 它会尝试映射到项目的地址属性并说出类似“不兼容的类型”之类的内容......我需要更多这样的东西吗?

class Project
{
    int AddressID {get;set;}

    Address Address {get;set;}
}

然后,当我从我的项目存储库中调用一些项目时,我会使用 AddressID(从数据库映射)将整个地址映射到地址属性,以提供足够的信息来在数据库中找到地址?

这类事情的常用技术是什么?

【问题讨论】:

  • 为什么不从数据库生成模型?
  • 数据库人员已经创建了数据库...我认为这可能是最安全的选择?它也已被另一个应用程序使用。
  • 如果其他项目也是 .NET EF 项目,您可以引用该项目(DLL 文件)并使用模型。
  • 如果数据库已经存在,那就省去麻烦,在 Database-First 方法中使用 EntityFramework!您可以调整生成的模型,并根据需要重命名/重塑实体,但第一个生成的模型将完全可用。如果在 db 中正确定义了主键和外键,那么您的模型将正确地具有从 ProjectAddress 的导航属性。
  • 有趣,我将首先阅读所有关于这个数据库的信息...至于 .net 中的其他项目...不,它在 Lotus Scrotes(Notes) ...它访问相同的数据库。

标签: c# entity-framework asp.net-mvc-5


【解决方案1】:

你可以试试这个:

class Project
{
    public int AddressID { get; set; }

    [ForeignKey("AddressID")]
    public Address Address { get; set; }
}

class Address
{
    // Your address properties here...
}

现在,当您从数据库中获取实体时,您可以使用来自 System.Data.Entity.Include() 扩展方法显式包含 ProjectAddress,如下所示:

public IEnumerable<Project> GetProjectsAndAddresses()
{
    return myDbContext.Projects.Include(x => x.Address);
}

如果您启用了延迟加载并且不处理您的 DbContext 实例,EF 将在您尝试访问它时尝试加载外部实体(在这种情况下您不需要使用 Include() 方法)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2016-01-06
    • 2022-06-16
    相关资源
    最近更新 更多