Entity framework 4 实体框架和SQL Server表属性

Entity framework 4 实体框架和SQL Server表属性,entity-framework-4,sql-server-2008-r2,entity-framework-5,Entity Framework 4,Sql Server 2008 R2,Entity Framework 5,我们有一个SQL Server 2008 R2数据库,其中包含多个表,每个表都有多个触发器。在其中一列中,我们将调用这个Person.Age,我们有一个默认值,因此如果我没有显式地提供一个值,它将默认为“18” 我正在使用EntityFramework 4.0(也尝试过5.0)和Visual Studio 2010从数据库中加载和选择。每当我使用以下语句插入到表中时,它都会插入一行,但不会完成默认值: var person = new Person { Name = "Peter" };

我们有一个SQL Server 2008 R2数据库,其中包含多个表,每个表都有多个触发器。在其中一列中,我们将调用这个Person.Age,我们有一个默认值,因此如果我没有显式地提供一个值,它将默认为“18”

我正在使用EntityFramework 4.0(也尝试过5.0)和Visual Studio 2010从数据库中加载和选择。每当我使用以下语句插入到表中时,它都会插入一行,但不会完成默认值:

var person = new Person
{
   Name = "Peter"
};

using (var ctx = new MyEntities())
            {
                ctx.PERSON.AddObject(person);
                ctx.SaveChanges();
            }
这将产生一个名为Peter的行,但年龄将设置为null,而不是我默认的18岁

当我刷新/加载我的EDMX文件时,我似乎只能导入简单的表和视图,并且似乎没有导入属性的选项-尽管我认为这是默认情况下完成的?你知道为什么默认属性没有触发吗

另外,我在SQLServer中定义了触发器,这样当一个新行插入PERSON时,另一个表就会更新。同样,如果我对数据库运行SQL direct,这也有效,但如果我使用EntityFramework通过Visual Studio执行,则不起作用


谢谢,

EF将显式地将列设置为您传递的值。因为,当您创建Person实体时,默认情况下年龄值将设置为null。EF将发送一个命令,在该命令中将列值设置为null。如果希望使用默认值,请在ctor中设置默认值(否则,对于引用属性,默认值为null,对于值类型属性(例如int),默认值为(T))

EF设计器从数据库中获取所有列,并创建一个模型,该模型中的实体的属性与它所指定的表和列的值相关。然后可以在设计器中调整模型-例如,可以删除不需要的属性

我不知道在触发的情况下“不起作用”对你们意味着什么——这可能取决于你们的期望。EF只是向数据库发送一个命令。因此,如果您发送的Sql命令与EF发送的命令相同,那么它应该以相同的方式“不工作”。尽管如此,EF是不可知数据库的,并且不知道类似DB magic的触发器。此外,仅从EF到DB的单向通信。因此,如果您希望数据库通知EF一些事情,那么它将无法工作。没有办法这样做

var person = new Person
{
   Name = "Peter"
};

using (var ctx = new MyEntities())
            {
                ctx.PERSON.AddObject(person);
                ctx.SaveChanges();
            }