双列代码优先EF

时间:2017-09-18 20:19:55

标签: c# sql entity-framework

首先在C#中使用EF进行代码尝试,因为我声明了

,我被卡住了
public class Members
{

    public int Id { get; set; }
    [Required]
    [StringLength(50)]
    public string Name { get; set; }
    public string Surname { get; set; }

    [Display(Name = "someDisplayName")]
    public bool ABool{ get; set; }


    public ReferenceClass ReferenceClass { get; set; }
    public byte ReferenceClassId { get; set; }
}

实体框架在创建后我添加了迁移

ID

NAME

SURNAME

ABool ReferenceClassID

ReferenceClass_ID

在我的SQL数据库中。现在nothings正确映射。如何解决?!

2 个答案:

答案 0 :(得分:0)

正如@BobMeijwaard指出的那样,你可能想要你的班级定义

public class Members
{

    public int Id { get; set; }
    [Required]
    [StringLength(50)]
    public string Name { get; set; }
    public string Surname { get; set; }

    [Display(Name = "someDisplayName")]
    public bool ABool{ get; set; }


    public ReferenceClass ReferenceClass { get; set; }
    public int ReferenceClassId { get; set; }
}

public byte ReferenceClassId { get; set; }更改为public int ReferenceClassId { get; set; }

如果可以提供更多信息,我可以更新我的答案,如果这不正确

答案 1 :(得分:0)

您的模型对实体框架不清楚。

如果我查看您的标识符的名称,您似乎想要建模ReferenceClassesMembers之间的一对多关系:每个ReferenceClass has zero or more成员{{1 }} {会员{1}} ReferenceClass`。

这不是你设计模型的方式。你告诉实体框架,成员是复杂类型, every和字节属性ReferenceClassId的组合。

请参阅:

如果查看实体框架为您建模的列名,很明显它将belongs to exactly one视为复杂类型(用于合成)

如果您想要一对多,则必须添加正确的导航属性。你只有一半,除了字节外键。

ReferenceClass

如果您遵循code-first conventions,那么实体框架就足以识别一对多。不要忘记ICollection附近的虚拟

如果需要特殊的列名或表名,可以使用属性来命名它们。虽然我更喜欢流畅的API,因为这将允许您在具有不同表的不同数据库中使用相同的类。

一对多的流利api:在ReferenceClass

class Member
{
    public int Id {get; set;}
    ...

    // Navigation properties:
    // a member belongs to exactly one ReferenceClass via foreign key
    public int ReferenceClassId {get; set;}
    public ReferenceClass ReferenceClass {get; set;}
}
class ReferenceClass {get; set;}
{
    public int Id {get; set;}
    ...
    // Navigation Properties:
    // A reference class has zero or more Members:
    public virtual ICollection<Member> Members {get; set;}
}

如果您的属性中有不同的名称,则可以使用此选项。如果要指定不同的名称,也可以使用ToTable和HasColumName

DbContext

A very good tutorial for entity framework code first