实体框架代码优先,错误:"EntityType 'OfferSequence'没有定义键

本文关键字:OfferSequence EntityType 定义 框架 quot 错误 实体 代码 | 更新日期: 2023-09-27 18:19:24

我首先使用实体框架代码。我正在尝试创建一个名为OfferSequence的新实体,以便在数据库中自动创建表。

问题是,当我尝试用新实体更新数据库时,我得到以下错误

在模型生成过程中检测到一个或多个验证错误:

ERP.EnterpriseDataAccessLayer.EnterpriseData。OfferSequence::EntityType 'OfferSequence'没有定义键。为此定义键EntityType。OfferSequences: EntityType: EntitySet 'OfferSequences' is基于没有定义键的'OfferSequence'类型。

但是,正如您在下面看到的,键在属性SequenceStart 上被清楚地定义了
public class OfferSequence : IEntity<OfferSequence>
{
    public OfferSequence(uint sequenceStart, uint incrementalCounter, uint annualIncrementalCounter)
    {
        Validate.EnsureIsTrue(incrementalCounter >= sequenceStart && annualIncrementalCounter >= sequenceStart, "Counters can not be lower than sequence start");
        SequenceStart = sequenceStart;
        IncrementalCounter = incrementalCounter;
        AnnualIncrementalCounter = annualIncrementalCounter;
        LastUpdateDate = DateTime.UtcNow;
    }
    [Key]
    public uint SequenceStart { get; private set; }
    public uint IncrementalCounter { get; private set; }
    public uint AnnualIncrementalCounter { get; private set; }
    public DateTime LastUpdateDate { get; private set; }
    public OfferSequence Clone()
    {
        OfferSequence copy = new OfferSequence(SequenceStart, IncrementalCounter, AnnualIncrementalCounter);
        return copy;
    }
    object ICloneable.Clone()
    {
        return Clone();
    }
    public void Modify(OfferSequence obj)
    {
        AnnualIncrementalCounter = obj.AnnualIncrementalCounter;
        IncrementalCounter = obj.IncrementalCounter;
        LastUpdateDate = DateTime.UtcNow;
    }
}

实体框架代码优先,错误:"EntityType 'OfferSequence'没有定义键

似乎你不能使用unsigned int作为实体框架中的键:我没有任何官方的说法,但是这个问题的答案表明它,就像这个一样。

编辑:实际上这是EF团队关于这个的官方说法。他们是这么说的:

EF Team Triage: EF内部不支持无符号整数用于存储元数据的模型。我们应该考虑支持它们,或者有一种处理非显式类型的方法支持。

错误信息肯定可以在这里得到改善,并且是一种症状我们的规则"代码优先"忽略了所有不支持的属性类型。我们可以检测到这种情况,并提供更好的信息。

考虑到我们在EF6版本中的位置,我们不会改变现在的东西。移动到Future以考虑即将发布的版本。