2016-03-03 76 views
1

在EF 6中,如何指定实体的属性是外键引用,以便在被引用的实体是父对象时不能删除另一个实体?如何使用流利的api在EF中设置外键6

这是我的类:

public class User 
{ 
    [Key] 
    public int id { get; set; } 
    public int parentId { get; set; } 
    [ForeignKey("parentId")] 
    public virtual User user { get; set; } 
} 

在上述类中,parentId是到另一个User的引用。

这里是我当前的代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().HasKey(x => x.id); 
    modelBuilder.Entity<User>().HasOptional<User>(x => x.user); 
    base.OnModelCreating(modelBuilder); 
} 

我收到以下错误:

One or more validation errors were detected during model generation:

DataService.Context.User_user: : Multiplicity conflicts with the referential constraint in Role 'User_user_Target' in relationship 'User_user'. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'.

回答

1

马培德的导航属性,你应该比添加地图类型用户的虚拟财产:

public class User 
{ 
[Key] public int id { get; set; }  
public int UserId { get; set; } 
public virtual User User{get;set;} 
} 
// ... 
modelBuilder.Entity<User>().HasOptional<User>(x=> x.User); 

了解更多关于关系的信息here

+0

我收到以下错误:'DataService.Models.User'不包含'User'的定义,并且没有找到接受'DataService.Models.User'类型的第一个参数的扩展方法'User' – user3736648

+0

查看答案中的更新 –

+0

虚拟用户是否根本改变数据库结构? – user3736648