Как я уже упоминал в своем комментарии, для достижения того, что вы хотите, требуется изменение дизайна. Вот мое предложение:
Поскольку ваша проблема связана со структурой таблицы продуктов, поскольку вы не знаете, что каждая компания хочет хранить в качестве информации для своего продукта, вы можете сделать это следующим образом: (Я объясню позже).
public class Company
{
[Key]
public int Id { get; set; }
[Display(Name = "Name")]
[Required]
public string Name { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
[Required]
[Display(Name = "Created date")]
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
public virtual ICollection<Product> Prodcuts { get; set; }
}
public class Product
{
[Key]
public int Id { get; set; }
[Display(Name="Name")]
[Required]
public string Name { get; set; }
[Required]
[Display(Name = "Created date")]
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
[Required]
[ForeignKey("Company")]
[Display(Name = "Company")]
public int CompanyID { get; set; }
public virtual Company Company { get; set; }
public virtual ICollection<ProductField> Fields { get; set; }
}
public class ProductField
{
[Key]
public int Id { get; set; }
[Display(Name = "Value")]
[Required]
public string Value { get; set; }
[Required]
[ForeignKey("Product")]
[Display(Name = "Product")]
public int ProductID { get; set; }
public virtual Product Product { get; set; }
[Required]
[ForeignKey("Field")]
[Display(Name = "Field")]
public int FieldID { get; set; }
public virtual Field Field { get; set; }
[Required]
[Display(Name = "Created date")]
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
}
public class Field
{
[Key]
public int ID { get; set; }
[MaxLength(100)]
[Index("ActiveAndUnique", 1, IsUnique = true)]
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Description")]
public string Description { get; set; }
[Required]
[Display(Name = "Created date")]
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
}
Объяснение кода:
Этот подход дает вам больший контроль над вашими данными без необходимости создавать таблицу для каждой информации о продукте.
Компания: Я начал с создания таблицы компании со свойством навигации, которое будет лениво загружать все связанные с ним продукты (если ленивая загрузка включена). Затем В таблице продуктов я добавил FK в ссылаться на компанию.
Поле: Поскольку вы упомянули, что не знаете, что у компании будет в качестве информации о продукте, вы можете создать новое поле и связать его с продуктом, используя таблицу ProductField.
[ 118] ProductField: Эта таблица будет действовать как «многие ко многим» между вашим продуктом и полем, в результате вы можете добавить столько полей к новому продукту, не изменяя структуру таблицы продуктов. или создайте новый. Вы также можете повторно использовать то же поле, если это нужно компании № 3.
ИСПОЛЬЗОВАНИЕ:
Учитывая, что у нас есть компания с именем MyCompany . У MyCompany есть продукт под названием «Автомобиль», и информация, которую необходимо добавить в автомобиль, - «Марка и цвет». Мы создаем два новых поля с именами Make и Color, затем в таблицу ProductField добавляем две новые записи: первая будет иметь: идентификатор поля «Make», значение «BMW» и ссылку на продукт с его идентификатор, который является автомобилем. Мы делаем то же самое для цвета, ссылаясь на поле «Цвет» и продукт «Автомобиль».
Запросы: Запросы теперь проще, чем иметь таблицу для каждой информации о продукте компании.
Пример:
var myProducts = _db.Products.Where(p=>p.CompanyID== "1").Include(p=>p.Fields).Tolist()
Опять же, это мое мнение. Надеюсь, это поможет.
Обычно Studio управления SQL является средством администрирования для Вашей базы данных и не предназначенный для ввода данных кроме быстрого редактирования здесь или там. Обычно Вы писали бы сценарий данных, или они будут вводиться приложением, которое использует базу данных для персистентности.
(Хотя я указал на Доступ к своему SQL Server DB для лучшего быстрого и грязного UI.)
Это может бороться с Вашим счетом - SQL Редактор LOB.
Другой опцией, на которую Вы могли бы хотеть посмотреть, является EMS Studio SQL для SQL Server.
Marc
Если Вы конкретно после хорошего большого многострочного редактирования диалоговые окна, то да определенно необходимо посмотреть за пределами строки Microsoft SSMS инструментов. Они не поддерживают его.
Я полностью рекомендую DBVisualizer. Хорошая вещь об этом, это поддерживает длинный список баз данных и универсальный все Драйверы JDBC (так как это записано в Java). Можно просмотреть различные базы данных, данные изменения и исследовать схему в хороших графиках. Это стало свободным и персональным выпуском за 149$ и полностью стоит того! Посмотрите на эту матрицу для сравнения.
Вы сможете отредактировать текст и ntext в SQL Server 2000, 2005 и неприветливый для следующих версий также.
Разве в Консоли управления не возможно делать действие контекстного меню "Open Table" и затем редактировать данные оттуда?
Если бы я должен был делать редактирования только иногда, то я, вероятно, использовал бы SQL Query Analyzer и просто написал бы сценарий команды UPDATE.
Если бы это было слишком неудобно, то я затем посмотрел бы на соединение с базой данных в Доступе, и к действительно быстрой и грязной простоте использования я буду просто использовать AutoForm для генерации UI для таблицы. Если у Вас нет Доступа, я полагаю, что Основа OpenOffice может соединиться через ODBC и имеет подобную функциональность создания формы.
Это просто глупо. Предприятие Manager для SQL Server 2000 обрабатывается многослойным текстом просто отлично. Просто глупо идти назад и свободная функциональность, которая была ранее существована. Не нравится ракетная наука для воспроизведения отформатированного текста. Кто-то действительно бросил мяч на этом.