0

我目前正在使用 Entity framework 4.3 来映射旧版 oracle 数据库。在我看来,所有数据类型都与 Oracle 数据类型兼容,但是它总是抛出一个TargetInvocationException内部异常为InvalidCastException. 有问题的表使用复合键,我不确定这是否与我收到异常的原因直接相关。我当前的代码如下

配置类:

class NoteConfig : EntityTypeConfiguration<Note>
{
    public NoteConfig()
    {

        Property(m => m.DateChanged).HasColumnName("DATE_CHANGED");
        Property(m => m.ObjectId).HasColumnName("OBJECT_ID");
        Property(m => m.ObjectType).HasColumnName("OBJECT_TYPE");
        Property(m => m.Subject).HasColumnName("SUBJECT");
        Property(m => m.Text).HasColumnName("TEXT");
        Property(m => m.EnteredBy).HasColumnName("ENTERED_BY");
        Property(m => m.LineNo).HasColumnName("LINE_NO");
        Property(m => m.LanguageId).HasColumnName("LANGUAGE_ID");

        //composite key mapping 
        HasKey(m =>
            new { 
                    m.ObjectType,
                    m.ObjectId, 
                    m.LanguageId,
                    m.Subject, 
                    m.LineNo,

            });


        ToTable("TSW_INT_NOTES", Settings.Default.DbSchema);
    }
}

型号类:

public class Note
{

  //  comp key (languageid, objectid, lineno, object type, subject
    public string Subject { get; set; }
    public string Text { get; set; }
    public string ObjectType { get; set; }
    public string ObjectId { get; set; }
    public DateTime DateChanged { get; set; }
    public string  EnteredBy { get; set; }
    public string LineNo { get; set; }
    public int LanguageId { get; set; }


}

表布局:

表格布局

断点输出:

断点输出

4

1 回答 1

0

这是一个数字数据类型问题,但它在 lineno 字段上,如果在小数位设置为 < 0 时尝试映射数字数据类型并且在 c# 中定义为 int 时不会自动截断十进制值,则 ef 似乎会引发异常它会在 c# 中使用浮点或双精度值

于 2012-05-09T14:47:34.337 回答