2011-10-07 70 views
0

说我有:EF4和的UnitOfWork - 如何让自定义属性工作

public class A 
{ 
    public virtual int Id { get; set; } 
} 

public class ARepository 
{ 
    private SomeContext _context; 
    public ARepository(IUnitOfWork unitOfWork) 
    { 
     _context = unitOfWork; 
    } 
    public A GetAById(int aId) 
    { 
     return _context.A.Where(o => o.Id == aId).SingleOrDefault(); 
    } 
} 

public class B 
{ 
    public virtual int Id { get; set; } 
    public virtual Category Category { get ; set; } //enum with NEW and OLD values 
    public virtual int Quantity { get; set; } 
} 


public class BRepository 
{ 
    private SomeContext _context; 
    public BRepository(IUnitOfWork unitOfWork) 
    { 
     _context = unitOfWork; 
    } 
    public B GetBById(int bId) 
    { 
     return _context.B.Where(o => o.Id == bId).SingleOrDefault(); 
    } 
} 

而且我与实体框架(第4.1代码)工作。

我将如何实现例如在类如自定义属性:

//returns the total of all B objects in the context where the category is NEW 
public int NewBTotals 
{ 
} 

而不必创建上下文?

希望我的问题已经够清楚了,如果不是,请让我知道,我会试着更加描述我想达到的目标(耗尽时间)。

+0

你的代码似乎有点不完整,就像你的'Category'属性缺少它的类型或名称。而且我不确定是否有'A'和'B'之间的关系,但是我会假设'A'具有与B的集合或关系。在任何一种情况下,我都会建议'GetNewBTotals'实现为扩展方法而不是自定义属性(该名称实际上意味着它是一种方法)。 – CodingGorilla

+0

基本上,由于我无法修改的错误的数据库设计,A通过名为“Source_reference”的列与B有关系。然而,B也可以引用X,Y或Z.为了找出它依赖的父类,我们应该查找“源”列。如果我使用扩展方法,我必须以某种方式传递上下文,这不知何故我不确定什么是最好的方法。 –

+0

你想总结些什么?您的评论说“上下文中的所有B对象的总数*”。但是,你必须有一个背景,为什么你不想创建一个?听起来很奇怪,因为上下文中的内容取决于之前做过的查询的类型或附加的内容等。 – Slauma

回答

0

我发现即使通过B没有A的外键,我也可以创建一个从A到B的导航属性,反之亦然,这种解决方案本身就是一个问题。