0

У меня есть класс под названием AppSettings, где хранятся некоторые настройки моего приложения. До сих пор я использовал только списки в моем DbContext какХранить отдельный экземпляр в DbContext с ASP.NET MVC 5 CF EF (нет списка)

public class MyDbContext: DbContext { 
    public DbSet<User> Users { get; get; } 
} 

Но для настройки, мне нужно нет списка. Я хочу только сохранить один экземпляр класса AppSettings. Я попытался установить его в качестве обычного члена

public class AppSettingsContext: DbContext { 
    public AppSettings AppSetting { get; get; } 
} 

Но это не работает: EF сгенерирует исключение, что тип объекта AppSettings не является частью модели для текущего контекста. Код:

using(var db = new AppSettingsContext()) { 
    var setting = new AppSettings() { 
     AttributeA = "Test", 
     //... 
    }; 
    db.Entry(setting).State = EntityState.Added; 
    db.SaveChanges(); 
} 

Можно ли это сделать с помощью EF? Или я вынужден самостоятельно реализовать эту логику, используя атрибут не сопоставленный, где я уверен, что только один экземпляр хранится и возвращается базой данных?

+0

Почему бы не использовать 'DbSet'? Вы уже используете базу данных, которая поддерживает таблицы с несколькими строками, также может использовать коллекцию на C#. – mason

+0

Я хочу сгруппировать свои настройки, что приводит к различным моделям: UserSettings, RegistrationSettings и т. Д. С DbSet у меня есть список каждого класса настроек. Это требует от меня использования индекса, проверьте, существует ли индекс и т. Д. Я бы хотел, чтобы один параметр имел доступ как «new AppSettingsContext(). RegistrationSettings.IsEnabled' – Lion

+0

Зачем использовать базу данных? Похоже, что вы будете делать с web.config. Во-вторых: почему бы просто не использовать DbSet, а затем сохранить внутри статического класса идентификаторы параметров, чтобы вы могли просто сделать что-то вроде. DbContext.Settings.FirstAsync (s => s.id == MyStaticClass.UserSettigns) Вы даже можете создать метод расширения, чтобы сделать его еще более удобочитаемым. Long sory short, no вы не можете хранить одиночные значения, это БД, это не то, как они работают –

ответ

0

Если вы хотите сохранить свои настройки в БД, вы не можете хранить сингулярные, это не так, как работает TSQL.

Если вам нужны только особые настройки для пользователя, я бы рекомендовал web.config. Если вы ДЕЙСТВИТЕЛЬНО хотите сохранить его в БД и хотите, чтобы у него было более конкретное чувство, вы могли бы просто расширить контекст базы данных следующим образом:

public class MyDbContext: DbContext { 
    public DbSet<User> Users { get; get; } 
    public DbSet<AppSettings> AppSettings { get; set;} 
} 

public static class MyDbExtensions 
{ 
    public static async Task<AppSettings> DbSettings(this MyDbContext context, Guid settingsGuid) 
    { 
     return await context.AppSettings.FirstAsync(as => as.Id == settingsGuid) 
    } 

    // OR 
    public static async Task<AppSettings> UserSettings(this MyDbContext context) 
    { 
     return await context.AppSettings.FirstAsync(as => as.Id == UserSettingsDbGuid) 
    } 
    public static Guid UserSettingsDbGuid = "Guid of user settings goes here" 
} 

// example usage: 
var context = GETDBCONTEXTMETHOD(); 
var userSettings == context.DbSettings(MyDbExtensions.UserSettingsDbGuid); 
// OR 
userSettings == context.UserSettings();