【发布时间】:2014-01-26 13:30:04
【问题描述】:
我的数据库中有 3 个实体:
- 用户(ID、姓名、IdRole)
- 合作伙伴(Id_User,ExpiredDate)
- 部门(Id_User,前缀)
根据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 的键。
Partner: EntityType: EntitySet 'Partner' 基于没有定义键的类型'Partner'。
部门: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 来制作这样的表格和关系呢?
【问题讨论】:
标签: c# .net entity-framework ef-code-first