我在数据库中有一个列不能为null,我想将其设置为在数据库中具有默认值 。问题是实体框架似乎自己创建了一个默认值(例如,int => 0),并完全忽略了数据库中的默认值约束。
有没有办法禁用实体框架的默认值?
答案 0 :(得分:6)
我发现您可以使用以下属性修饰字段。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
答案 1 :(得分:3)
有时我们需要手动执行EF不会自动执行的操作。
如果使用EF 4.1“Code First”,我通常会创建一个从IDatabaseInitializer派生的独立类DbInitializer,并且在InitializeDatabase方法的实现中,只需调用
context.Database.ExecuteSqlCommand("ALTER TABLE TABLENAME ... ");
现在在从DbContext派生的类的静态构造函数中,只需调用初始化程序:
Database.SetInitializer(new DbInitializer());
通过这种方式,可以指定任何数据库DML / DDL命令来改变表/列,以确保数据库符合我们的要求。
答案 2 :(得分:3)
原生,Entity框架不允许这样做。你必须做一些代码。 This answer from another site似乎解决了许多人的问题。
他通过做类似的事情来“破解”它(正如他所说的那样):
public partial class YourEntityClass {
public YourEntityClass() {
this.PropertyNameWithDefaultValue = default(int);
}
}
注1:有人提到它可能在EF4中不起作用
个人提示:对不起我的英语,我通常说法语。
答案 3 :(得分:3)
最好通过在EDMX编辑器中设置属性的默认值来使用EF默认值。
当实体字段和数据库字段之间存在一对一映射时,EDMX更新程序无法读取字段默认值,这很痛苦。
答案 4 :(得分:0)
您可以通过“属性”窗口更新EDMX
模型以更改任何列的默认值。但是,实体框架似乎不会自动获取DEFAULT
约束。不确定是否有办法让它做到这一点。