سلام
اصلا چه نیازی هست که SaveChanges صدا زده بشه و آیدی رو بگیریم؟ این موردی هست که خود EF مدیریت میکنه و انجامش میده
فرض بفرمائید یک کلاس پست داریم و یک کلاس کامنت (به شرح ذیل) و اینها یک ارتباط یک به چند دارند (هر پست میتونه صفر یا بیشتر کامنت داشته باشه)
public class Post {
public Post()
{
this.Comments = new List<Comment>();
}
public int PostId { get; set; }
public string Title { get; set; }
public int? AuthorId { get; set; }
public DateTime? PublishDateTime { get; set; }
public string PostContent { get; set; }
public string Description { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
public class Comment {
public int CommentId { get; set; }
public int? PostId { get; set; }
public int? Sequence { get; set; }
public int? UserId { get; set; }
public DateTime? SubmitDateTime { get; set; }
public string CommentText { get; set; }
public virtual Post Post { get; set; }
}
با این تعریف ها ، کد زیر یک رکورد در جدول Post درج میکنه و تعداد 5 رکورد در جدول Comment درج میکنه که FK اونها ، همون مقدار ID رکورد جدول Post هست
var ctx = new SampleDBContext();
var post = new Post
{
Title = "Test Title",
PublishDateTime = DateTime.Now,
PostContent = "Lorem ipsum dolor",
Description = "...",
Comments = new List<Comment>
{
new Comment { CommentText = "First" },
new Comment { CommentText = "Second" },
new Comment { CommentText = "Third" },
new Comment { CommentText = "Fourth" },
new Comment { CommentText = "Fifth" },
}
};
ctx.Posts.Add(post);
ctx.SaveChanges();
البته این کد رو میشه شکل های دیگری هم نوشت ، اما ساده ترینش به نظر بنده اینجوری میشه.