链接数据库中的友好名称,添加数据库列或在应用程序中使用转换器?

时间:2013-09-17 18:46:21

标签: c# sql-server wpf database-design mvvm

我有一个使用MVVM模式的WPF应用程序和正在访问MSSQL服务器的MVVM Light Tookkit。下面是一个示例数据库(我拥有的数据库更复杂):

Employee Table:
|Name          | ShipToLocation
---------------|--------------------
|John          | 1

ShipToLocation Table:
|Code | CityName 
------|------------------
| 1   | New York

我使用EntityFramwork从我的数据库表中创建对象。我遇到的问题是我的程序现在,我不得不使用很多像这样的IValueConverters:

    <ListBox Grid.Row="1" Grid.ColumnSpan="3" ItemsSource="{Binding Employees}" HorizontalContentAlignment="Stretch" SelectedItem="{Binding ThisEmployee}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                    <TextBlock HorizontalAlignment="Center">
                        <TextBlock.Text>
                            <MultiBinding Converter="{StaticResource IntToShipTo}">
                                <Binding Path="VendorCode" Mode="OneWay"/>
                                <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.ShipToLocations"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

在我的ViewModel中,有一个名为Employees的属性,它包含一个Emplyoyee列表,以及一个名为ShipToLocations的属性,该属性包含所有Ship To Locations的列表。我必须使用RelativeSource才能访问ShipToLocations属性,因为ListBox的ItemSource设置为“Employees”,这会导致设计时查看问题

我在很多地方都有这种连接,我需要为每个连接器制作一个转换器。这似乎有很多开销,也是单元测试的噩梦。

我想知道的是,在我的员工表中添加一个名为ShipToFriendlyName的列,然后在ShipToLocation字段上附加一个触发器,在更改int时更新frienldy名称是不好的做法。这样就可以避免在每次需要找出Integer的友好名称时进行数据库调用。谢谢

1 个答案:

答案 0 :(得分:1)

  

我想知道的是,这是不好的做法......

是的,那将是非常糟糕的做法。