以编程方式更改数据库表EntityFramework模型对象是指

时间:2012-12-25 05:37:58

标签: asp.net-mvc-3 entity-framework

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

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

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

修改

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

2 个答案:

答案 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
}

}