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

时间:2015-10-27 16:07:09

标签: c# entity-framework

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

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

  

在模型生成期间检测到一个或多个验证错误:

     

ERP.EnterpriseDataAccessLayer.EnterpriseData.OfferSequence ::   EntityType' OfferSequence'没有定义键。为此定义密钥   的EntityType。 OfferSequences:EntityType:EntitySet' OfferSequences'是   基于类型' 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;
    }
}

1 个答案:

答案 0 :(得分:3)

看来你不能在实体框架中使用unsigned int作为关键字:我没有任何官方说明这一点,但this question上的答案表明它,this one也是如此。

编辑:实际上here是EF团队关于此的官方消息。这就是他们所说的:

  

EF Team Triage:EFs内部不支持无符号整数   用于存储元数据的模型。我们应该考虑支持   他们,或者有办法处理非明确的类型   支撑。

     

这里肯定可以改进错误消息,这是一个症状   我们的规则,Code First只是忽略任何不受支持的属性   类型。我们可以检测到这种情况并提供更好的信息。

     

鉴于我们在EF6版本中的位置,我们不会改变   什么现在。转向未来考虑即将发布的版本。