Или Вы хотели просто видеть, имеет ли столбец только Нулевые значения (и, таким образом, вероятно, не использовано)?
Дальнейшее разъяснение вопроса могло бы помочь.
РЕДАКТИРОВАНИЕ: хорошо.. вот некоторый действительно грубый код для получения Вас движение...
SET NOCOUNT ON
DECLARE @TableName Varchar(100)
SET @TableName='YourTableName'
CREATE TABLE #NullColumns (ColumnName Varchar(100), OnlyNulls BIT)
INSERT INTO #NullColumns (ColumnName, OnlyNulls) SELECT c.name, 0 FROM syscolumns c INNER JOIN sysobjects o ON c.id = o.id AND o.name = @TableName AND o.xtype = 'U'
DECLARE @DynamicSQL AS Nvarchar(2000)
DECLARE @ColumnName Varchar(100)
DECLARE @RC INT
SELECT TOP 1 @ColumnName = ColumnName FROM #NullColumns WHERE OnlyNulls=0
WHILE @@ROWCOUNT > 0
BEGIN
SET @RC=0
SET @DynamicSQL = 'SELECT TOP 1 1 As HasNonNulls FROM ' + @TableName + ' (nolock) WHERE ''' + @ColumnName + ''' IS NOT NULL'
EXEC sp_executesql @DynamicSQL
set @RC=@@rowcount
IF @RC=1
BEGIN
SET @DynamicSQL = 'UPDATE #NullColumns SET OnlyNulls=1 WHERE ColumnName=''' + @ColumnName + ''''
EXEC sp_executesql @DynamicSQL
END
ELSE
BEGIN
SET @DynamicSQL = 'DELETE FROM #NullColumns WHERE ColumnName=''' + @ColumnName+ ''''
EXEC sp_executesql @DynamicSQL
END
SELECT TOP 1 @ColumnName = ColumnName FROM #NullColumns WHERE OnlyNulls=0
END
SELECT * FROM #NullColumns
DROP TABLE #NullColumns
SET NOCOUNT OFF
Да, существуют более легкие пути, но у меня есть встреча для движения в прямо сейчас.Удачи!
We use Controllers too but in our case they are responsible for the application workflow. The Controller knows the ViewModel and the Model but not the concrete View because this will be injected by the IoC Container.
If you are interested in an example that shows more than just one UI (modal dialog, wizard with conditional workflow) then you might have a look at:
WPF Application Framework (WAF) - http://waf.codeplex.com
Может ли ваша ViewModel не зависеть от IController или какого-либо другого интерфейса, чтобы они могли ответить на него? Я стараюсь убрать как можно больше логики приложения из ViewModel, поскольку эти классы могут легко раздуться.
MyViewModel(IController controller)
{
this.controller = controller;
}
void Save()
{
this.controller.Save();
}
Я согласен с тем, что инфраструктуры MVVM имеют тенденцию быть слишком упрощенными с их образцами. В частности, мне хотелось бы увидеть больше примеров перемещения между представлениями / экранами в вашем приложении. Я создаю интерфейс IViewManager, чтобы позволить моим моделям просмотра запрашивать переход к другому виду.
Я использую аналогичную вам настройку. В моем контроллере, где мой DI и инъекция представления прекращается, я иногда сохраняю ссылку на ViewModel (который содержит View). В некоторых случаях у меня может быть событие на виртуальной машине, которое обрабатывается контроллером. В других крайних случаях (например, если виртуальная машина / виртуальная машина была создана вне контроллера, скажем, в другой виртуальной машине), я могу даже использовать EventAggregator (с сильной ссылкой) для прослушивания событий, которые могут быть запущены на виртуальной машине. В этом случае сохраненная ссылка на виртуальную машину не требуется.
Как насчет использования событий, при которых контроллер подписывается на события виртуальной машины, или использования шаблона посредника, при котором посредник внедряется в виртуальную машину.