问题在标题中。我们可以以编程方式更改数据库表,Model类中的对象(如下所示)引用并继续对新表进行操作吗?
public class Word
{
public int ID { get; set; }
public string Text { get; set; }
}
这最初是在EntityFramework中自动引用“Words”表,有没有办法在运行时之前/期间更改它?如果是这样,怎么样?
修改
我从数据库表“Words”中获取项目中Views中使用的所有字符串。现在,我想要的是,用户向系统输入新语言,并创建一个新表,例如WordsEnglish。从那时起,如果用户选择英语作为语言,Word对象将引用WordEnglish。
答案 0 :(得分:1)
最好用一个用例来更好地理解你想要完成的事情,但这里有......
在DbContext.OnModelCreating方法中,您可以配置模型,例如
// Removes pluralization convention for all tables.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
或
// Specific table name for Word Entity.
modelBuilder.Entity<Word>().ToTable("TableContainingWords");
如果您要更改模型,Code First Migrations可能就是您所需要的。
答案 1 :(得分:0)
我还没有找到一种在运行时真正动态扩展EF模型的方法。鉴于DB上下文继承类中发生的事情,使用生成的视图来提高性能和模型类方法,避免重新编译似乎很难。我已经生成了代码,使用程序集发现方法编译和访问它。但从我的观点来看,这一点都令人不满意,所以我不再调查这条道路了。非常笨重的结果。
具有讽刺意味的是,您提供的主题是这个问题的一个用例,在我的视图中不需要动态EF。
我有完全相同的用例,特定于语言的消息/标签等等,即语言特定的文本池。
为什么不在类/表中添加语言。 对支持的语言使用表或枚举。 在Textpool表/ s中使用语言
使用其他模型类进行演示。 (查看模型)。 所以你可以用它来表达它。
public class Word
{
Guid ID {get;set;} // logical key is WordID + Language
public int WordID { get; set; } // implement with new id or 2 field key
public Language Language {get;set;} // see cultureInfo for more details
public bool IsMaster {get;set;}
public string Text { get; set; } // consider renaming due to reserved word implications
}
public class language
{
int ID,
String Lang
}
}