EntityFramework代码第一个可以为空的外键

时间:2015-05-21 11:58:00

标签: c# entity-framework

我都是,

我试图获得一个可以为空的外键,但无法让它为我工作。 我的模型看起来像这样:

public class User : IdentityUser
{
    public string Telephone { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime LastLoginDate { get; set; }

    public DateTime DateCreated { get; set; }
    public DateTime DateModified { get; set; }
    public string CreatedById { get; set; }
    public string ModifiedById { get; set; }
    public User CreatedBy { get; set; }
    public User ModifiedBy { get; set; }
    public bool Deleted { get; set; }

    public int CompanyId { get; set; }

    /// <summary>
    /// Generate the user identity
    /// </summary>
    /// <param name="service">The user service</param>
    /// <param name="authenticationType">The autentication type</param>
    /// <returns></returns>
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserService service, string authenticationType)
    {

        // Create our identity
        var userIdentity = await service.CreateIdentityAsync(this, authenticationType);

        // Return our identity
        return userIdentity;
    }
}

CompanyId 是应为null的外键,所以在我的 DbContext 中我设置了这个映射:

modelBuilder.Entity<Company>().HasMany(m => m.Members).WithOptional().HasForeignKey(m => m.CompanyId);

但是当我运行我的应用程序时,我总是收到错误:

  
      
  • InnerException {“INSERT语句与FOREIGN KEY约束冲突\”FK_dbo.Users_dbo.Companies_CompanyId \“。冲突发生在database \”melanite \“,table \”dbo.Companies \“,列'Id'。 \ r \ n语句已终止。“} System.Exception {System.Data.SqlClient.SqlException}
  •   

有谁知道如何更改我的映射才能正常工作?

3 个答案:

答案 0 :(得分:0)

public int? CompanyId { get; set; }

这会将CompanyId映射为可以为空的外键

答案 1 :(得分:0)

要添加上述答案: Nullable类型以两种方式之一声明:

System.Nullable变量 -OR -

T'变量

T是可空类型的基础类型。 T可以是任何值类型,包括struct;它不能是参考类型。

以下MSDN链接提供了一个很好的解释 https://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

答案 2 :(得分:0)

在您的上下文类

中尝试此操作
protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
                .HasOptional(s => s.Company);}