entity-framework - Entity Framework 数据库默认插入允许更新

标签 entity-framework

有没有办法让 Entity Framework 在插入时使用 SQL 默认值,同时允许更新字段。我们有一个实例,其中 SQL 表有一个标识列“id”和另一个设置为 ident_current(“table”) 的列。我知道使用默认值插入字段的唯一方法是将该字段设置为 DatabaseGenerated(DatabaseGeneratedOption.Computed) 以便在插入时忽略它。但是,通过具有该属性,我们无法对该列执行更新。此外,它是一个自引用外键,因此我们无法通过插入然后立即更新来解决该问题。不要问我为什么这张 table 是这样设计的——只是它以前的设置方式,所以我们现在有点坚持使用它。下面是我们设置的简单图表:

域类:

Class1 {
     public int id {get;set;}
     [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
     public int id2 {get;set;}
     public string Name {get;set;}
}

SQL(伪):

Table (
    id INT  which is an identity(1,1) column,
    id2 INT NOT NULL with a default value of ident_current("table")
    Name nvarchar(50)
)

我们希望 EF 生成的插入语句是:

INSERT INTO Table(Name) VALUES('Name') 

更新为:

UPDATE table 
SET id2 = *somenumber*, name = 'Name'

非常感谢所有的帮助。如果需要,我们也使用 EF 4.3.1.0。

最佳答案

据我所知,这是不可能的。参见 thisthat .

第一个链接指向一个关于使用序列作为主键的建议,这看起来像是你可能想要做的事情,而不是给出你的示例代码。

第二个链接指向有关默认值的通用处理的建议,目前也不支持该建议,但可能是为您需要的内容添加支持的另一个潜在起点。

关于entity-framework - Entity Framework 数据库默认插入允许更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15531240/

相关文章:

c# - 删除最后 N 条记录, Entity Framework

entity-framework - Entity Framework - SSDL 和 CSDL 中的不同多重性

c# - 如何设置一个具有两个外键的实体?

c# - 如何在 Entity Framework 6 的 LEFT JOIN 中生成 IS NULL 和 IS NOT NULL

c# - Entity Framework 创建的主键不会自动递增

c# - 在运行时迁移不同的数据库

entity-framework - 为什么 EF Core 使用此存储过程总是返回 -1?

linq - Entity Framework 仅返回一个值但列表大小正确

c# - DbContextTransaction 关于回滚的说明

c# - 如何通过 FromSqlRaw 调用 EF Core 3.0 中的存储过程