首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么当数据类型要小得多时,实体框架尝试创建大于8060字节的行?

为什么当数据类型要小得多时,实体框架尝试创建大于8060字节的行?
EN

Stack Overflow用户
提问于 2017-04-04 14:15:00
回答 3查看 400关注 0票数 1

我试图通过代码优先的方法在实体框架6中创建一个数据库。我知道错误:

索引'PK_surveyor.CONDITIONS‘行长度超过最大允许长度'8060’字节。无法创建约束或索引。请参阅先前的错误。

类条件的定义如下:

代码语言:javascript
代码运行次数:0
运行
复制
[Table("surveyor.CONDITIONS")]
public partial class CONDITION : ISurveyComponent
{
    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ID { get; set; }

    [Column(Order = 1, TypeName = "char")]
    public string NAME { get; set; }

    [Column(Order = 2)]
    [DataType(DataType.DateTime)]
    public DateTime LASTUPDATED { get; set; }

    [Column(Order = 3)]
    public int ENABLED { get; set; }

    public enum ActionTypes { JumpOnPass = 0, SetFromResponse = 1, SetResponse = 2 };

    [Column(Order = 4)]
    public int ACTIONTYPE { get; set; }

    [NotMapped]
    public ActionTypes Action
            {
            get
                {
                return (ActionTypes)ACTIONTYPE;
                }
            }

    public enum TestTypes { AlwaysFail=0, AlwaysPass=1,PassIfEqual=11,PassIfNotEqual=12
            ,PassIfLessThan=13,PassIfLessThanOrEqual=14,PassIfGreaterThan=15,PassIfGreaterThanOrEqual=16
            ,PassIfEmpty=20,PassIfDisabled=30};
    [Column(Order = 5)]
    public int TESTTYPE { get; set; }

    [NotMapped]
    public TestTypes Test
            {
            get
                {
                return (TestTypes)TESTTYPE;
                }
            }

    public enum LeftOperandTypes {None=-1, Response=0, Comment=1, Step=2, Club=3, Province=4, ClubPrize=5};

    public int? LEFTTYPE { get; set; }

    [NotMapped]
    public LeftOperandTypes LeftOperandType
        {
            get
            {
            if(LEFTTYPE.HasValue)
                return (LeftOperandTypes)LEFTTYPE;
            return LeftOperandTypes.None;
            }
        }

    public enum RightOperandTypes {None=-1, Response=0, AbsoluteValue=1};

    public int? RIGHTTYPE { get; set; }

    [NotMapped]
    public RightOperandTypes RightOperandType
        {
            get
            {
                if(RIGHTTYPE.HasValue)
                    return (RightOperandTypes)RIGHTTYPE;
                return RightOperandTypes.None;
            }
        }

    public long? PARAMID1 { get; set; }

    public long? PARAMID2 { get; set; }

    public long? PARAMID3 { get; set; }

    public long? PARAMID4 { get; set; }

    public int? PARAMINT1 { get; set; }

    public int? PARAMINT2 { get; set; }

    public int? PARAMINT3 { get; set; }
}

这将产生一个大约592字节+头长的表行。我可以看到null处理添加了几个字节,但是为什么EF试图创建大于8060字节的行呢?

另外,我得到的例外要求我“查看以前的错误”。对在哪里看到这些有什么想法吗?在例外情况下,与它们没有任何联系。

EN

回答 3

Stack Overflow用户

发布于 2017-04-04 14:26:35

检查您的insert (HttpPost)逻辑,该错误是,而不是与整个行大小相关的,而是单字段大小。一列可容纳的最大数据大小为8000字节。尝试查看试图插入超过此数字的一个或多个字段的任何尝试插入。例如,超过8000个字符的Varchar字符串或Nvarchar字符串有超过4000个字符。

您还可以检查previous错误消息,它通常显示在第一个错误消息的下面。

票数 0
EN

Stack Overflow用户

发布于 2017-04-17 15:09:37

答案是,Typename = "char“正在使EF陷入混乱,并导致错误。错误信息是假的。

票数 0
EN

Stack Overflow用户

发布于 2020-11-12 11:41:40

我刚刚收到了同样的错误信息。在我的示例中,连接字符串的名称已在应用程序配置文件中更改,但没有以DbContext构造函数的名称(参数nameOrConnectionString)更改,因此EF试图使用不存在的连接字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43209798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档