首先在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正确映射。如何解决?!
答案 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)
您的模型对实体框架不清楚。
如果我查看您的标识符的名称,您似乎想要建模ReferenceClasses
和Members
之间的一对多关系:每个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