我的SQL表包含Id列,其数据类型为uniqueidentifier
。根据SO上的建议,我将其设置为默认值(newid())
。
首先使用Entity Framework 4.2代码,然后我将我的Guid属性映射到SQL中的相关字段:
[Key]
public Guid Id { get; set; }
但是,每当我尝试插入实体时,都会收到以下异常:
其中一个主键值的类型与实体中定义的类型不匹配。
参数类型'Edm.Guid'和'Edm.String'与此操作不兼容。在WHERE谓词附近,第1行,第61列。
我可以在Google和Google上找到的唯一解决方案是在我的ID上添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
作为数据注释。这不会改变一件事 - 那么还有什么可能导致这个错误?
提前致谢。
答案 0 :(得分:1)
您尝试设置识别StoreGeneratedPattern吗? 你可以在OnModelCreate方法中做到这一点。
Model.Entity<Foo>().Property(o => o.Id).HasDatabaseGenerationOption(DatabaseGeneratedOption.Identity);
答案 1 :(得分:1)
如果您需要性能并且有一个索引,那么使用Guid作为主键是不明智的。 Guids是使用随机值生成的,因此每次插入新项时,与使用bigint相比,SQL会更多地更新索引(每次都必须插入索引的不同部分而不是总是追加到最后)。如果你需要一个唯一的标识符(比如在不共享相同数据库的系统之间链接项目),那么只需将其作为附加列添加到表中(如果你是偏执的并且愿意在插入/上采取perf命中/更新,你可以另外添加一个唯一约束)。
答案 2 :(得分:-1)
试
[Key]
public string ID {get;set;}
而不是
[Key]
public Guid ID {get;set;}