2013-03-20 102 views
3

有没有办法让实体框架在插入上使用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。

回答

0

有没有办法AFAIK。见thisthat

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

第二个链接指向关于默认值的一般处理的建议,目前也不支持该默认值,但这是另一个增加对所需内容支持的潜在起点。

+0

尽管此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – bummi 2013-11-05 18:19:41

+0

@bummi:感谢您的评论,我更新了答案,试图传达链接建议的要点。但请注意,因为它们仅仅是对框架的建议,所以它们不是答案的一部分(其非常简单地为“否”),只是具有潜在兴趣的指针。 – tne 2013-11-05 18:27:35