我的数据库中有3个实体:
根据IdRole
,User
表中的某些记录可以包含Partner
或Department
表中的一些其他数据。
所以,我想创建关系User.Id => Partner.Id_User
和User.Id => Department.Id_User
。
Partner.Id_User
和Department.Id_User
必须是没有同一身份的外键和主键。
我试过两种方式:
属性
public class Partner
{
[Key]
public virtual User Id { get; set; }
public DateTime ExpiredDate { get; set; }
}
public class Department
{
[Key]
public virtual User Id { get; set; }
public string Prefix { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public Role IdRole { get; set; }
}
导致以下错误:
在模型生成期间检测到一个或多个验证错误:
Entity.Entity.Partner :: EntityType'Partner'没有定义键。定义此EntityType的密钥。
Entity.Entity.Department :: EntityType'Department'没有定义键。定义此EntityType的密钥。
合作伙伴:EntityType:EntitySet“合作伙伴”基于未定义键的“合作伙伴”类型。
Department:EntityType:EntitySet'Department'基于没有定义键的'Department'类型。
我尝试过使用流畅的API
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Department>().HasOptional(f => f.Id).WithRequired(s => s.Department);
modelBuilder.Entity<Partner>().HasOptional(f => f.Id).WithRequired(s => s.Partner);
base.OnModelCreating(modelBuilder);
}
错误消息相同。
那么,如何使用Code-First创建这样的表和关系?
答案 0 :(得分:2)
public class Partner
{
[Key]
[ForeignKey("User")]
public virtual int Id { get; set; }
public User User { get; set; }
public DateTime ExpiredDate { get; set; }
}
public class Department
{
[Key]
[ForeignKey("User")]
public virtual int Id { get; set; }
public User User { get; set; }
public string Prefix { get; set; }
}