我都是,
我试图获得一个可以为空的外键,但无法让它为我工作。 我的模型看起来像这样:
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}
有谁知道如何更改我的映射才能正常工作?
答案 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);}