【问题标题】:Entity Framework code-first, error: "EntityType 'OfferSequence' has no key defined"实体框架代码优先,错误:“EntityType 'OfferSequence' 没有定义键”
【发布时间】:2015-10-27 16:07:09
【问题描述】:

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

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

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

ERP.EnterpriseDataAccessLayer.EnterpriseData.OfferSequence: : EntityType 'OfferSequence' 没有定义键。为此定义密钥 实体类型。 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;
    }
}

【问题讨论】:

  • 你没有无参数构造函数,不确定 EF 能否处理这种情况。

标签: c# entity-framework


【解决方案1】:

看来您不能在 Entity Framework 中使用 unsigned int 作为键:我没有任何官方说法,但this question 上的答案暗示了这一点,this one 也是如此。

编辑:实际上here 是 EF 团队对此的官方说法。他们是这样说的:

EF 团队分类:EF 内部不支持无符号整数 用于存储元数据的模型。我们应该考虑支持 它们,或者有办法处理未明确显示的类型 支持。

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

鉴于我们在 EF6 版本中所处的位置,我们不会更改 现在什么。转到 Future 以考虑即将发布的版本。

【讨论】:

    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多