我尝试使用AspNetUsers的主键ID作为我的Contractor表,它给我一个错误说"无法将NULL值插入列ID"。当我在注册用户后尝试创建承包商并且它们出现在AspNetUsers中时,会发生错误。
public class Contractor
{
[Key, ForeignKey("ApplicationUser")]
public string ID { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
public class ApplicationUser : IdentityUser
{
public virtual Contractor Contractor { get; set; }
修改
承包商是音乐家的基类。 从控制器创建音乐家的代码
public ActionResult Create([Bind(Include = "FirstName,LastName,ZipCode,Phone,PrimaryInstrument,PrimaryGenre,NextDateAvailable,WebsiteLink, YouTubeLink,SoundCloudLink, ReverbNationLink,YearsOfExperience,Description")] Musician musician, HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if (image != null)
{
string imageFilePath = Server.MapPath("~/Images/");
image.SaveAs(imageFilePath + image.FileName);
musician.ImageData = new byte[image.ContentLength];
musician.ImageMimeType = image.ContentType;
musician.ImageName = image.FileName;
}
musician.CreateDate = DateTime.Now;
db.Musicians.Add(musician);
db.SaveChanges();
return View();
}
return View(musician);
}
音乐家班:
public class Musician : Contractor
{
public string PrimaryInstrument { get; set; }
public string PrimaryGenre { get; set; }
public string WebsiteLink { get; set; }
public string YouTubeLink { get; set; }
public string SoundCloudLink { get; set; }
public string ReverbNationLink { get; set; }
}
}
答案 0 :(得分:2)
尝试在OnModelCreating
课程的context
事件中添加此代码:
modelBuilder.Entity<ApplicationUser>()
.HasOptional<Contractor>(user => user.Contractor)
.WithRequired(cont => cont.ApplicationUser)
.WillCascadeOnDelete(true);
这是为了一对一的关系&#34;在ApplicationUser
和Contractor
之间(ApplicationUser
不需要Contractor
)。
如果您希望每个用户Contractor
,只需更改HasOptional
的{{1}}。
答案 1 :(得分:0)
我意识到我可以将User.Identity.GetUserId()用于Id值,并将其保存到我的数据库模型中。它解决了外键问题。