0

问题在标题中。我们能否以编程方式更改 Model 类中的对象(如下图所示)所引用的数据库表并继续对新表进行操作?

public class Word
{
    public int ID { get; set; }
    public string Text { get; set; }
}

这最初是指 EntityFramework 中的“Words”表,有没有办法在运行之前/期间更改它?如果是这样,怎么做?

编辑:

我通过他们的 ID 从数据库表“Words”中获取项目中视图中使用的所有字符串。现在,我想要的是,用户向系统输入一种新语言,然后将创建一个新表,例如 WordsEnglish。从那时起,如果用户选择英语作为语言,Word 对象将引用 WordEnglish。

4

2 回答 2

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 迁移。

于 2012-12-25T08:58:42.110 回答
0

我还没有找到一种在运行时真正动态扩展 EF 模型的方法。考虑到数据库上下文继承类中发生的情况,使用生成的视图来提高性能和模型类方法,避免重新编译似乎很困难。我已经使用程序集发现方法生成代码、编译和访问它。但从我的角度来看,这一切都不能令人满意,所以我已经停止研究这条路了。非常笨拙的结果。

具有讽刺意味的是,您作为此类问题的用例提供的主题在我看来是不需要动态 EF 的主题。

我有完全相同的用例,特定于语言的消息/标签等查找,即特定于语言的文本池。

为什么不将语言添加到类/表中。为支持的语言使用表或枚举。在文本池表中使用语言

使用不同的模型类进行演示。(查看模型)。所以你可以像 .

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
}

}
于 2012-12-26T03:48:46.237 回答