使用ASP在DbContext中存储单个实例.. NET MVC 5 CF EF(没有列表)



我有一个名为AppSettings的类,我在其中存储我的应用程序的一些设置。到目前为止,我只在我的DbContext中使用列表,如

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

但是对于设置,我需要no列表。我只想存储我的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可以做到这一点吗?或者,我是否必须通过使用未映射的属性来实现这个逻辑,确保数据库只存储和返回一个实例?

如果你想在DB中存储你的设置,你不能存储单数,这不是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();

最新更新