在Entity Framework上插入一个新的SubItem
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Entity Framework上插入一个新的SubItem相关的知识,希望对你有一定的参考价值。
所以,我需要在Items数据库中插入一个新的SubItem。我的意思是,我有以下模型类:
public class FacebookDataUser
{
[Key,JsonProperty("id")]
public string FacebookDataUserId { get; set; }
public string name { get; set; }
public string birthday { get; set; }
public string email { get; set; }
[JsonProperty("Events")]
public virtual FaceEvents FaceEvents { get; set; }
[Column(TypeName = "datetime2")]
public DateTime DateOfInsert { get; set; }
}
public class FaceEvents
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FaceEventsId { get; set; }
[JsonProperty("data")]
public ICollection<FaceEventData> FaceEventDatas { get; set; }
}
public class FaceEventData
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FaceEventDataId { get; set; }
public string description { get; set; }
public string name { get; set; }
[Column(TypeName = "datetime2")]
public DateTime start_time { get; set; }
[JsonProperty("Place")]
public virtual FacePlace FacePlace { get; set; }
public int attending_count { get; set; }
public string type { get; set; }
public string rsvp_status { get; set; }
[Column(TypeName = "datetime2")]
public DateTime end_time { get; set; }
}
当我插入一个新用户时,它的确定。没有错误。问题是当用户已经在数据库中,但事件是新的并且不在数据库中,所以我需要插入它。尝试添加时出错。代码:
[ResponseType(typeof(FacebookDataUser))]
public async Task<IHttpActionResult> PostFacebookDataUser(FacebookDataUser facebookDataUser)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
FacebookDataUser faceUser = await db.FacebookDataUsers.FindAsync(facebookDataUser.FacebookDataUserId);
if (faceUser == null)
{
facebookDataUser.DateOfInsert = DateTime.Now;
db.FacebookDataUsers.Add(facebookDataUser);
}
else
{
var listEvents = facebookDataUser.FaceEvents.FaceEventDatas.ToList();
for (var i=0; i<= facebookDataUser.FaceEvents.FaceEventDatas.Count; i++)
{
var eventName = listEvents[i].name;
var events = db.FacebookDataUsers.Where(b => b.FaceEvents.FaceEventDatas.Select(x => x.name).ToList().Contains(eventName)).FirstOrDefault();
if (events == null)
{
FaceEventData faceEventsData = listEvents[i];
try
{
faceUser.FaceEvents.FaceEventDatas.Add(faceEventsData);
}
catch (Exception e)
{
}
}
}
db.FacebookDataUsers.Add(faceUser);
}
await db.SaveChangesAsync();
}
错误在于:
faceUser.FaceEvents.FaceEventDatas.Add(faceEventsData);
我错过了一些东西,我是ENtity的新手。我很感激帮助。
更新:
错误
你调用的对象是空的
答案
请问这里的用户,给了我一个亮点,我发现“FaceEventsDatas”为空。所以我推出了代码:
var FaceEventDatas = db.FacebookDataUsers.SelectMany(x => x.FaceEvents.FaceEventDatas).ToList();
听完之后。并更改为Attach而不是上下文Add,因为是插入属于另一个类的行。
db.FacebookDataUsers.Attach(faceUser);
以上是关于在Entity Framework上插入一个新的SubItem的主要内容,如果未能解决你的问题,请参考以下文章
使用 Entity Framework 5 将特定 id 插入 MySQL 中的自动递增字段
在使用 Entity Framework 数据库优先在表上插入行之前,如何从 PL/SQL 执行触发器?
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
无法在 VS 2017 .NET Core 上启用 Entity Framework 迁移