0

我目前在我的 EF Code First MVC 项目中有以下模型(为简洁而编辑):

public class Car
{
    public int Id { get; set; }
    public string Descrip { get; set; }

    // Navigation Property.
    public virtual CarColour CarColour { get; set; }
    ... + numerous other navigation properties.
}

public class CarColour
{
    public int Id { get; set; }
    public string ColourName { get; set; }
}

数据库中的 CarColour 表包含许多行。

在我的项目中,我有大约 10 个此类表,它们本质上是查找表。

我的任务不是有 10 个查找表(和 10 个相应的代码中的“硬”类型),而是实现一种更可重用的方法,而不是拥有大量特定于 Car 的查找表(在本例中)有几个表,其中一个可以保存项目类型(颜色、燃料类型等),一个包含每种类型的各种值。我们的想法是我们的​​模型将能够被许多其他项目重用——其中一些可能具有数百种不同的属性,因此,我们不想在代码中创建新的类/类型并生成每个都有一个新的查找表。

我很难理解这种方法的 c# 实现,希望有人能给我一个例子,说明如何在代码中实现这一点,更具体地说,上述模型需要如何更改,以及哪些附加类需要完成这个吗?

4

2 回答 2

0

您的基础实体必须实现 INotifyPropertyChanged 并使其通用:

public virtual CarColour CarColour {
 Get { return this.carColour; }
 Set {
     this.Carcolour; = value
     OnPropertyChanged("CarColour");
     }
}

有关更多信息,请参阅:模式和实践:CodePlex 中的 Prism。 http://compositewpf.codeplex.com/wikipage?title=Model%20View%20ViewModel%20(MVVM)

问候巴萨姆

于 2013-08-09T13:02:11.263 回答
0

这不一定特定于 EF,但我一直在这条路上,并没有真正享受它。

我想用一个表来表示“通用”信息,虽然我认为它很聪明,但很快就显示出它的局限性。其中之一是您在编写查询以提取此数据时需要引入的复杂性,如果您执行的不仅仅是“为这辆车获取颜色”。

我想说,如果您的数据是简单的键/值并且值类型总是相同的,那么就去做吧,甚至可能值得将这个对象作为一个简单的“元数据”:

public class Car
{
    public int Id { get; set; }
    public string Descrip { get; set; }
    public MetaData CarColours { get; set; }
}

public MetaData : Dictionary<int, string>
{
    public MetaData(int group){}
}

假设表:

TableMetaData(int metaGroup, int metaId, string metaValue)

如果您希望将不同的类型存储为您的值,并且可能需要对此数据执行连接 - 避免使用它并更具体一点。

于 2013-08-09T14:47:58.773 回答