EF单向外键关系

时间:2015-12-01 23:21:04

标签: c# sql-server entity-framework foreign-key-relationship many-to-one

如果我有两个代码优先实体:

用户:

public class User 
{
    public User() {}

    [Key]
    public int Id {get; set;}
    public string Name {get; set;}
    public string City {get; set;} 
}

城市:

public class City
{
    public City() {}
    [Key]
    public string Name {get; set;}
}

如何建立外键关系以使User表具有City_Name FK,其中包含一个必须与City表中的某个Name对应的字符串?我不需要另一个方向的参考,我只想确保City_Name中的dbo.Users来自Name中的dbo.Cities

如果我只使用这样的模型进行迁移,它会在City_Name中创建dbo.Users列,并且插入工作正常,但如果我想返回User obj, City始终为null,即使我使用dbContext.Entry(user).Reference(u => u.City).Load()手动加载城市。

我可能做错的任何想法或见解,以及在EF中如何实现这种关系?

2 个答案:

答案 0 :(得分:0)

像这样:

public class User 
{
  [Key]
  public int Id {get; set;}
  public string Name {get; set;}
  [ForeignKey("CityMappedToUser")]
  public string City_Name {get; set;}

  public virtual City CityMappedToUser{get; set;} 
}

它在msdn tbh:https://msdn.microsoft.com/en-us/data/jj713564.aspx

上解释得非常好

答案 1 :(得分:0)

看起来你需要这样的东西:

public class User 
{
    public User() {}

    [Key]
    public int Id {get; set;}
    public string Name {get; set;}

    public string City_Name {get; set;}
    [ForeignKey("City_Name")]
    public virtual City City { get; set; }
}

public class City
{
    public City() {}
    [Key]
    public string Name {get; set;}
}