我在使用 EntityFramework.IBM.DB2(v6.0.3)程序包从.Net 4.5.2应用程序连接到Informix数据库时遇到问题。当我尝试查询数据库时,我不断收到以下错误:
System.NotSupportedException:没有与之对应的商店类型 EDM类型' Edm.String'原始类型'字符串'。
抛出错误的一行是:
var existing = db
.MyEntities
.FirstOrDefault(e => e.IdB == myId);
实体本身:
public class MyEntity
{
public long IdA { get; set; }
public long IdB { get; set; }
public string NameA { get; set; }
public string NameB { get; set; }
public ICollection<OtherEntity> OtherEntities { get; set; }
}
用于创建表格的脚本:
create table myentity (
idA BIGINT not null,
idB BIGINT not null,
nameA NVARCHAR(200) not null,
nameB NVARCHAR(200) not null
)
extent size 32 next size 32
lock mode page;
alter table myentity add constraint primary key
(idB)
constraint pk_myentity;
表格配置:
public class MyEntityConfig : EntityTypeConfiguration<MyEntity>
{
public EventTypeConfig()
{
ToTable("MyEntity");
HasKey(u => u.IdB);
Property(u => u.IdB).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Property(s => s.IdA).IsRequired();
Property(s => s.NameA).IsRequired().HasMaxLength(200);
Property(s => s.NameB).IsRequired().HasMaxLength(200);
HasOptional(e => e.OtherEntities);
HasMany(e => e.OtherEntities);
}
}
当我运行testconn40
时,我接受了测试通过,所以我认为这不是连接到数据库的问题。我还有另一个项目使用非常类似的设置,所以我不知道出了什么问题。
任何人都可以提供有关此特定错误的任何帮助或信息。非常感谢。
答案 0 :(得分:2)
此错误是由于.Net类型如何映射到数据库类型。
我的一个数据库表中有一个类型LVARCHAR(32000)
的字段,我的实体上的相应字段是string
。我将数据库中的字段更新为NCHAR(32000)
,并将以下内容添加到我的实体配置类中:
Property(s => s.StringProp).HasMaxLength(32000).IsRequired();
一旦我做了这些更改,错误就消失了。
我遇到的另一个奇怪的错误是:
System.NotSupportedException:没有与之对应的商店类型 EDM类型&#39; Edm.Guid&#39;原始类型&#39; Guid&#39;。
Informix似乎不支持Guid类型;我使用VARCHAR(36)
并在插入和检索时在Guid和字符串之间进行映射,所以这个错误很奇怪。事实证明,这取决于我如何使用LINQ查询。
此行引发错误:
var dbEntity = dbContext
.MyEntities
.FirstOrDefault(e => e.Id == myGuid.ToString());
这在哪里工作正常:
var id = myGuid.ToString();
var dbEntity = dbContext
.MyEntities
.FirstOrDefault(e => e.Id == id);
基本上我发现的是,当您尝试使用EntityFramework.IBM.DB2
做任何事情时,您必须尽可能简单明了地保持一切,否则您将继续遇到隐秘的错误或不支持在网上找到。
希望这有助于将来。
答案 1 :(得分:0)
EF支持仅使用IBM DB2客户端驱动程序。 由于IBM DB2客户端驱动程序使用DRDA协议,因此 需要启用带有IDS服务器的DRDA端口,然后才能工作。
IBM DB2 Client团队在developerworks论坛上更加活跃。 如果您仍然遇到问题,可以将其重新发布到developerworks上,网址为