3

我已阅读并理解该约定。我遵循了约定,在大多数情况下,外键的 sql 列名称是数据库中的“ForeignKeyEntityId”。不幸的是,这并不总是一致的,我将 ForeignKeyEntity_Id 作为 sql 列名。

public class Step : BaseModel
{
    private ObservableCollection<StepRecord> _stepRecords;


    public Step()
    {
        _stepRecords = new ObservableCollection<StepRecord>();
    }

    public int Id { get; set; } 

    public DateTime? StartTime { get; set; }
    public DateTime? EndTime { get; set; }


    public int? PassStatusTypeId;
    public  virtual PassStatusType PassStatusType


    public int? SaveStatusTypeId;
    public  virtual SaveStatusType SaveStatusType

    public int? StepTypeId;
    public virtual StepType StepType { get; set; }

    public virtual ObservableCollection<StepRecord> StepRecords { get; set; } 
}

此类中的所有引用都以 ForeignKeyEntity_Id 模式命名。这不是我所期待的。

4

2 回答 2

0

如果您想为外键指定特定名称,可以使用 ForeignKey 属性,如下所示:

[ForeignKey("MyChildEntity")]
public int? ChildEntityId {get;set;}
public ChildEntity MyChildEntity {get;set;}

在这种情况下,您的数据库将使用 ChildEntityId 名称而不是默认命名约定。

在您的情况下,它将类似于:

[ForeignKey("PassStatusType")]
public int? PassStatusTypeId {get;set;}
public  virtual PassStatusType PassStatusType {get;set;}
于 2013-08-19T15:07:51.587 回答
0

可能实体框架根本不映射公共字段,只有公共属性。因此,字段PassStatusTypeId,SaveStatusTypeIdStepTypeId不被识别为外键,EF 创建自己的外键列,按照约定,其名称中带有下划线。您应该改用属性:

public int? PassStatusTypeId { get; set; }
public virtual PassStatusType PassStatusType { get; set; }

public int? SaveStatusTypeId { get; set; }
public  virtual SaveStatusType SaveStatusType { get; set; }

public int? StepTypeId { get; set; }
public virtual StepType StepType { get; set; }
于 2013-08-19T15:12:50.010 回答