我有以下内容:
public class Entity<TKey> : IEntity
{
[System.Runtime.Serialization.DataMemberAttribute]
public virtual TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public virtual StateEnum State { get; set; }}
public class Party : Entity<int>
{
public virtual int TypeId { get; set; }
public virtual string MobileNo1 { get; set; }}
public class Person : Party
{
public virtual int PartyId { get; set; }
public virtual string Name { get; set; }}
我在sql Party表中包含以下列[Id,TypedId,MobileNo1] 和Person表包含以下列:[PartyId,Name]和PartyId是Party的Id的外键。
如何制作地图?我已经尝试了但是我没有达到任何目的。
修改
假设TKey是整数 PartyId是党的关键人物和外键的关键
我尝试为人制作地图
HasKey(p =&gt; p.PartyId);
ToTable( “人”);
和派对
HasKey(p => p.Id);
ToTable("Party");
它不起作用,我在这种情况下如何制作地图?
编辑2:
我有以下
public class Entity<TKey> : IEntity
{
[System.Runtime.Serialization.DataMemberAttribute]
public virtual TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public virtual StateEnum State { get; set; }}
public class Person : Entity<int>
{
public virtual string FirstName{ get; set; }
public virtual string LastName{ get; set; }
}
public class Employee: Person
{
public virtual int PersonId { get; set; }
public virtual string CompanyName{ get; set; }
}
我有Person表包含[Id,FirstName,LastName] 我有Employee表包含[PersonId,FirstName,LastName]
- PersonId是person表的外键。 - 员工是一对一关系的人。 - 为了将来我可以添加学生实体,所以学生就是人
如何制作地图?
答案 0 :(得分:1)
我认为你正试图做这样的事情:
public class Entity<TKey> : IEntity
{
[System.Runtime.Serialization.DataMemberAttribute]
public TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public StateEnum State { get; set; }}
public class Party : Entity<int>
{
public int TypeId { get; set; }
public string MobileNo1 { get; set; }
public virtual Person Person {get; set;}
}
public class Person
{
public int PartyId { get; set; }
public string Name { get; set; }
public virtual Party Party {get; set;}
}
所以Person有一个聚会(如果它是可选的,你声明int?
)并且Party继承自Entity。我还删除了许多可能没有意义的虚拟声明(如果我对其中一些错了,请纠正我)。 virtual
关键字在实体框架中用于指示导航属性。因此,这些属性是与其他现有实体的“链接”。 (还假设PartyId
是Person
)的主键。
我不确定这会因为TKey
中的Party
主键而有效(如果你自己声明没有主键,EF自动选择名称中带有“id”的属性)可以是一个不同的类型,来自Person的外键始终是int
...为什么不能将Id声明为int
?
编辑:1:1的关系
modelBuilder.Entity<Person>()
.ToTable("Person")
.HasKey(p => p.PartyId)
.HasRequired(p => p.Party)
.WithRequiredDependent(p => p.Person)
.Map(pers => pers.MapKey("PartyId");
这通常应该有效。它基本上说人需要一个党,党需要一个人。因为Person有外键,所以它是依赖的。
您还需要在没有所有虚拟属性的情况下更新模型,并将虚拟属性添加到相应的实体(就像我发布的模型中那样)。虽然使用属性会更容易并且将流畅的api保留为这是为了这个:
public class Entity<TKey> : IEntity
{
[System.Runtime.Serialization.DataMemberAttribute]
public TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public StateEnum State { get; set; }}
public class Party : Entity<int>
{
public int TypeId { get; set; }
public string MobileNo1 { get; set; }
public virtual Person Person {get; set;}
}
public class Person
{
[Key,ForeignKey("Party")]
public int PartyId { get; set; }
public string Name { get; set; }
public virtual Party Party {get; set;}
}