有没有办法让实体框架在插入上使用SQL默认值,但是却允许更新字段。我们有一个SQL表具有标识列“id”和另一列设置为ident_current(“table”)的实例。我知道以默认值插入字段的唯一方法是将该字段设置为DatabaseGenerated(DatabaseGeneratedOption.Computed)
,以便在插入时忽略它。但是,通过拥有该属性,我们无法对列进行更新。它也是一个自引用的外键,所以我们不能做插入,然后立即更新来解决问题。不要问我为什么桌子是这样设计的 - 就像它之前设置的方式一样,所以我们现在仍然坚持。我们设置的一个简单的示意图如下:插入时实体框架数据库默认允许更新
DomainClass:
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。
尽管此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – bummi 2013-11-05 18:19:41
@bummi:感谢您的评论,我更新了答案,试图传达链接建议的要点。但请注意,因为它们仅仅是对框架的建议,所以它们不是答案的一部分(其非常简单地为“否”),只是具有潜在兴趣的指针。 – tne 2013-11-05 18:27:35