我正在学习实体框架和POCO,虽然我喜欢很多概念,但我认为我并没有完全理解它。这里有一个例子:实体框架和POCO
我有类似下面的模式:
create table Customer
{
Id int,
Name varchar(32),
Value1 varchar(32),
Value2 varchar(32),
Value3 varchar(32)
...
Value50 varchar(32)
}
-- ColumnName will map to "Value1", "Value2", etc
create table ColumnMapping
{
ColumnName varchar(32),
DisplayName varchar(32)
}
表示这个数据看起来像对象:
class Customer
{
public Id { get; set; }
public Name { get; set;}
public Dictionary<string, string> CustomData { get; set; }
}
也就是说,我想映射值1将Value50设置为Dictionary(字典的关键字由ColumnMapping表确定)。
我想知道这是什么最好的方法。
我希望客户成为POCO,但为了做到这一点,它需要了解Value1..Value50,以便它能够将这些列转换为字典。但考虑到POCO应该持续无知,我在质疑这是否是正确的方法。我想,一般来说,我正在为POCO的真正目标而努力 - 它是业务层使用的对象,还是需要在POCO和“业务对象”之间进行映射,以及“业务对象”是业务层应该使用的。
任何有关如何处理这种情况的建议将不胜感激。
编辑
,因为我没有得到一个答案,我想请问一下,我会继续前进,并指示我决定的问题(如果任何人有这种类似的问题)。虽然POCO持续不知情,因为它不需要知道它如何持续下去,但它并不完全是无知的。也就是说,它必须以某种方式与持久层绑定。
在我的示例中,尽管我不希望业务层了解Value1,Value2,Value3等,但有人需要知道它以便将这些值转换为字典。我认为把这个逻辑放在正确的地方是POCO,因此我认为POCO应该具有Value1,Value2,Value3等列的属性。
感谢, 埃里克
感谢雷。我认为你建议我应该使用不同的模式。虽然你对某些应用程序可能会更好,但我们假设对于这个问题我需要具有上述模式。通过我提到的模式,我想知道POCO对象应该是什么样子,以及在业务层中是否有不同的(但相似的)对象。 – Eric 2012-02-17 06:27:06