【问题标题】:Code First nullable Foreign Key not recognizedCode First 可空外键无法识别
【发布时间】:2018-01-17 06:19:22
【问题描述】:

我做了一个 .Net MVC 项目。首先,我创建了一个包含所有模型和 Db 上下文的 ClassLibrary,并且我使用这个库来处理数据库。现在我想在另一个解决方案的另一个项目中使用这个类库。我引用了类库,但这个新项目不识别可为空的外键(例如“字符串”或可为空的“Int”)。运行时出错。

类示例

[Table("PORT_CALLS")]
public class PORT_CALLS
{
    [Key]
    public Int64 SID { get; set; }

    [ForeignKey("SHIP_CALLS")]
    public Int64 SHIP_CALL_SID { get; set; }

    public virtual SHIP_CALLS SHIP_CALLS{ get; set; }

    [ForeignKey("MNG_OPERATORS")]
    public Int64 ? OPERATOR_SID { get; set; }

    [JsonIgnore]
    public virtual MNG_OPERATORS MNG_OPERATORS { get; set; }

    public Decimal ? FORE_DRAUGHT { get; set; }

    public Decimal ? MID_SHIP_DRAUGHT { get; set; }

    public Decimal ? AFT_DRAUGHT { get; set; }

    public Decimal ? AIR_DRAUGHT { get; set; }

    public Int16 ? IS_TANKER { get; set; }
}

错误:实体类型没有定义键定义此实体类型的键(所有可为空的外键都会出现此错误)

【问题讨论】:

  • 您引用的新项目是否与共享项目的框架版本相同?
  • 某些实体“没有定义键”,即不是 primary 键。该错误还应该为您提供错误实体的名称。
  • 该模型格式正确,因为它已被其他应用程序成功使用。我观察到该模型仅与 MVC API 项目不兼容(当我在 WindowsForm 应用程序或控制台应用程序中使用此库时,它可以工作)。我在所有项目(4.5)中都使用相同版本的框架。

标签: c# asp.net-mvc entity-framework-6


【解决方案1】:

您应该将[ForeignKey] 属性应用于SHIP_CALLS 属性,并使用提供外键的属性名称:

[ForeignKey("SHIP_CALL_SID")]
public virtual SHIP_CALLS SHIP_CALLS{ get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多