我有一个名为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();