Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在自动同步的主键字段上插入Linq_C#_Sql Server_Linq_Guid - Fatal编程技术网

C# 在自动同步的主键字段上插入Linq

C# 在自动同步的主键字段上插入Linq,c#,sql-server,linq,guid,C#,Sql Server,Linq,Guid,我或多或少想做这个问题所暗示的事情。 不过,我想解释一下。我有一个客户数据库。我从这里加载Linq对象,然后通过WCF发送它们。另一方面,我将它们附加到数据上下文,并将它们发布到表中。问题是,它们将设置Guid列。此列在DBML中标记为自动同步。因此,在插入的情况下,Linq强制我使用新值。我希望它能在我需要的时候保持我的价值 更新1 基本上,我想通过编程动态地翻转自动同步和IsDbGenerated设置 [Column(Storage="_cName", AutoSync=

我或多或少想做这个问题所暗示的事情。

不过,我想解释一下。我有一个客户数据库。我从这里加载Linq对象,然后通过WCF发送它们。另一方面,我将它们附加到数据上下文,并将它们发布到表中。问题是,它们将设置Guid列。此列在DBML中标记为自动同步。因此,在插入的情况下,Linq强制我使用新值。我希望它能在我需要的时候保持我的价值

更新1

基本上,我想通过编程动态地翻转自动同步和IsDbGenerated设置

[Column(Storage="_cName", 
        AutoSync=AutoSync.OnInsert, 
        DbType="UniqueIdentifier NOT NULL", 
        IsPrimaryKey=true, IsDbGenerated=true)]

如果不使用反射,则无法动态更改属性。您可以通过手工编码linq以另一种方式完成这项工作。我不建议动态更改属性,它们是设计的属性,更改这些属性可能会产生不可预见的后果。

让我重新表述一下问题:您希望在两侧使用相同的对象定义,但在一侧希望生成标识符,而在另一侧希望插入标识符?据我所知,实现这一点的唯一方法是使用基于XML的元数据,而不是基于属性的元数据。不幸的是,据我所知,VisualDBML设计器不支持XML元数据。但是,您可以使用SqlMetal工具生成XML,然后修改该文件以在web服务的另一端使用


您可以在这里开始使用SqlMetal:

您需要查看的肯定是IsDbGenerated属性,而不是自动同步

我看到您已经描述了一个场景,您希望在应用程序中设置ID。实际上是否存在另一种需要由数据库自动生成的场景?如果没有,您只需设置IsDbGenerated=false,并在您还没有来自客户端的ID时在WCF服务中填充Guid.NewGuid()


使用rowguid而不是identity列的优点之一是,您可以在rowguid列中插入特定值,但不必这样做。您可以使用默认的NEWID()将列保留为rowguid,但在您的服务中设置IsDbGenerated=false,只要您记得实际填充ID,它仍然可以工作。

您可能希望动态更改IsDbGenerated,而不是自动同步。我不知道有什么办法可以马上做到这一点。