c# - Entity Framework 5.0 代码中第一个一对一和一对多的关系

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

我有两个实体 - ProductPicture。这个想法是一个产品可以只有一张图片或没有图片,一张图片可以映射到许多产品。

public class Product
{
    public int Id {get; set;}

    public Picture Picture { get; set; }

    public bool Enabled { get; set; }

    public string Text { get; set; }
}

Picture 实体是到另一个包含所有图片的 Pictures 实体的映射(此 Picture 实体仅包含产品图片的映射),因此基本上它只包含两列身份证。

public class Picture
{
    public int Id {get; set;}

    public int PictureId { get; set; }
}

这是我的 Product 实体模型 Binder

modelBuilder.Entity<Product>().HasOptional<Picture>(pr => pr.Picture);

当我创建带有图片的 Product 实体,或将图片添加到现有实体时,Product 中创建的 Picture_Id 列表中正确填充了 Picture 表中的 Id。问题是当我尝试检索产品 时。 Product 实体中的 Picture 实体为空。我怀疑映射不正确。你能告诉我如何在检索时将 Picture 实体填充到 Product 实体中吗?下面是检索代码:

 public Product GetProductById(int productId)
    {
        var query = from pr in _productRepository.Table
                    where pr.Id == productId
                    select pr;

        return query.FirstOrDefault();
    }

编辑:我正在使用包含在依赖项注入(inject)中的自定义 IRepository 服务

IRepository<Product>

IRepository 接口(interface)包含以下方法:

    void Insert(T entity);
    void Update(T entity);
    void Delete(T entity);
    IQueryable<T> Table { get; }

这是的实现:

 public virtual IQueryable<T> Table
    {
        get
        {
            return this.Entities;
        }
    }

    private IDbSet<T> Entities
    {
        get
        {
            if (_entities == null)
                _entities = _context.Set<T>();
            return _entities;
        }
    }

我无法将 .Include("Picture") 添加到 Table,因为它是 IQueryable。 我也启用了延迟加载,但没有结果。

最佳答案

var products = db.Pictures.Include("Product");

public Product GetProductById(int productId)
    {
        var query = from pr in products
                    where pr.Id == productId
                    select pr;

        return query.FirstOrDefault();
    }

关于c# - Entity Framework 5.0 代码中第一个一对一和一对多的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852858/

相关文章:

c# - ASP.Net MVC 用户列表及其角色

c# - 将数据从 Listbox1 复制到 Listbox2

.net - 为 Entity Framework 安装Oracle Data Provider时的"access denied"

mysql - EF 是否完全支持任何跨平台数据库?

sql - 从ASP.NET MVC中的现有数据库生成种子代码

c# - 将 Entity Framework 4.4 与 Mysql 结合使用

c# - 如何从 Expression<Func<T>> 构建 Expression<Func<T,bool>>

c# - 将 DataTable 中的所有记录插入远程数据库

c# - 在 Razor 页面中访问异步属性

c# - Asp.net MVC - 在 cshtml 页面中创建环境特定的元标记