рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдПрдХ рдФрд░ рдирдЬрд╝рд░: рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдиреБрдХрд╕рд╛рди

рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдВрдкрдирд┐рдпрд╛рдВ Linq2Sql рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреА рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рдирдП рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ EF рдХреЛ Microsoft рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдХреНрд╕реЗрд╕ рддрдХрдиреАрдХ рджреНрд╡рд╛рд░рд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Linq2Sql рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред

рдЬреЛ рд▓реЛрдЧ рдЕрднреА рднреА рд╕рдВрджреЗрд╣ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдИрдПрдл (рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдкрд░рд┐рдЪрдп


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА EF рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдкреВрд░реНрдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдм рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддреЗред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦреЗрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреАрдЪреЗ Linq2Sql рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдВрдХ рд╣реЛрдВрдЧреЗ, рдкреЛрд╕реНрдЯ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рддреБрд▓рдирд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ Linq2Sql рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдПрдХ рдЕрдиреБрдХреВрд▓рди рдореИрдиреБрдЕрд▓ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреА рдЬрд╛рдПрдВрдЧреАред рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреЗ SQL рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рдПрдХ рдкрдж рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрд░реЗрдЦрд╛ рдХреЛрдб рдкреНрд░рдердо, рдПрд╕рдХреНрдпреВрдПрд▓ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ ORM рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдЪрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдИрдПрдл рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдИрдПрдл 5 рд╣реИред рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП , .NET 4.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рд╕рднреА рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ (рдЬреЛ рд╕реНрд╡рдпрдВ Microsoft рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рд╣реИ)ред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ - рд▓реЛрдХрд▓рдбрдм (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреВрд░реНрдг рдПрдордПрд╕ SQL тАЛтАЛрд╕рд░реНрд╡рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ)ред

рдЯреЗрд╕реНрдЯ рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рдбреЗрдЯрд╛ рдореЙрдбрд▓


рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓реАрдХреГрдд рдкрддреНрд░рд╛рдЪрд╛рд░ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдореЙрдбрд▓ рдХрд╛ рдЬреНрдЮрд╛рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ( Account ) рдХреЗ рдкрд╛рд╕ рдкрддреНрд░ ( MessageFolder ) рдХреЗ рд╕рд╛рде рдХрдИ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрдИ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк ( MessageThread ) рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдХ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ( ThreadsInFolders )ред рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдореЗрдВ рдХрдИ рдЕрдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЦрд╛рддреЛрдВ, рдкрддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдмреЗрд╢рдХ, рдЗрд╕ рд░реВрдк рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рд╢рд╛рдпрдж рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрддреНрдорд╛ рдореЗрдВ рдХреБрдЫ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЫреЛрдЯрд╛, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рдереА рдЬреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред рдорд╛рдлрд╝ рдХреАрдЬрд┐рдПред

рд╡рд╣ рдХреЛрдб рдореЗрдВ рд╣реИ
 public class Account { public int Id { get; set; } [Required] public string Name { get; set; } } public class Message { public int Id { get; set; } public bool IsRead { get; set; } public DateTime Date { get; set; } public string Text { get; set; } [Required] public virtual MessageThread Thread { get; set; } [Required] public virtual Account Owner { get; set; } [Required] public virtual Account Sender { get; set; } [Required] public virtual Account Receiver { get; set; } } public class MessageThread { public int Id { get; set; } [Required] [StringLength(150)] public string Subject { get; set; } public virtual ICollection<MessageFolder> Folders { get; set; } } public class MessageFolder { public int Id { get; set; } public string Name { get; set; } [Required] public Account Owner { get; set; } public virtual ICollection<MessageThread> Threads { get; set; } } 

рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛


рдХрд┐рд╕реА рднреА ORM рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ рдбреЗрдЯрд╛ рдкрдврд╝рдирд╛ рд╣реИред рдпрд╣рд╛рдБ, EF рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реАрдЬрд╝ рдордЬрд╝реЗрджрд╛рд░ рдФрд░ рдЙрддреНрддреЗрдЬрдХ рд░реВрдк рд╕реЗ, рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рд╕рдорд░реНрдерд┐рдд рд╣реИред рд╕рднреА рднрд░реА рд╣реБрдИ рд╡рд╕реНрддреБрдПрдВ рдЖрдВрддрд░рд┐рдХ рд╕рдВрджрд░реНрдн рдХреИрд╢ рдореЗрдВ рдЧрд┐рд░рддреА рд╣реИрдВ, рдлрд┐рд░ рдЙрд╕рд╕реЗ рд╕реАрдзреЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреЗрд╡рд▓ Find рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
 context.Messages.AsNoTracking().OrderBy(f => f.Id).Take(count) .Include(f => f.Owner).Include(f => f.Sender).Include(f => f.Receiver) .ToList(); 

рдПрд╕рдХреНрдпреВрдПрд▓
 SELECT TOP (100) [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent2].[Id] AS [Id1], [Extent2].[Name] AS [Name], [Extent3].[Id] AS [Id2], [Extent3].[Name] AS [Name1], [Extent4].[Id] AS [Id3], [Extent4].[Name] AS [Name2] FROM [dbo].[Message] AS [Extent1] INNER JOIN [dbo].[Account] AS [Extent2] ON [Extent1].[Owner_Id] = [Extent2].[Id] INNER JOIN [dbo].[Account] AS [Extent3] ON [Extent1].[Sender_Id] = [Extent3].[Id] INNER JOIN [dbo].[Account] AS [Extent4] ON [Extent1].[Receiver_Id] = [Extent4].[Id] ORDER BY [Extent1].[Id] ASC 

AsNoTracking рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрдУрдВ рдХреА EF рдЯреНрд░реИрдХрд┐рдВрдЧ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ (рд╡реЗ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛); Include - рдкреАрдврд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХреЗрддрд┐рдд рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ (рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рдВрдкрддреНрддрд┐) рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, INNER JOIN ; рдмрд╛рдХреА рд╕рднреА LINQ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред

рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ Include ред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЕрдВрддрд┐рдо рдЕрд╣рд╕рд╛рд╕ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА Include рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд╛рди рд╣реИ, рдпрд╛ рдЖрд╕рдиреНрди рд╕реНрддрд░ рдкрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдорд╡реАрд╕реА рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЖрдкрдХреЛ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
  1. IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

    Find
    . Find , . , context.Messages.Find(1) , . . , .
    context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
    SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
    context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

    , , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

    : 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


    . Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

    :
    ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
    StackOverflow .
    EF , ( ) Linq2Sql. , , Linq2Sql.


    .NET ORM-. Bulk-. , SQL , ORM .
    , . EF :
    var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
    SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
    -, , . , , , тАУ . , , . .

    update/delete . , .

    EntityFramework.Extended :
    var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
    SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
    . , SaveChanges тАУ SQL . , - , /.

    , , dynamic ( , , IntelliTrace), . (EntityFramework ).
    10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
    , EntityFramework.Extended , . .

    navigation property
    тАУ . ┬л !┬╗ :
    var count = folder.Threads.Count();
    , navigation properties, , SQL.
    SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
    EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
    var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
    SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
    , , , , , ┬л ┬╗.


    тАУ , .

    :
    Response.Cache.SetLastModified(lastUpdated);
    lastUpdated тАУ , .
    , ASP.NET MVC ToUniversalTime() , :
    if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
    тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

    EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

    RequiredAttribute
    EF.

    , Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

    , -, ?
    var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
    , - . DbEntityValidationException .

    RequiredAttribute , null, . , , .

    : (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

    (tl;dr)
    EF - ? . , Microsoft - EF.

    , EF , , . , , , EF.

    EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

    , , - Entity Framework. // , . .
  2. IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

    Find
    . Find , . , context.Messages.Find(1) , . . , .
    context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
    SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
    context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

    , , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

    : 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


    . Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

    :
    ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
    StackOverflow .
    EF , ( ) Linq2Sql. , , Linq2Sql.


    .NET ORM-. Bulk-. , SQL , ORM .
    , . EF :
    var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
    SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
    -, , . , , , тАУ . , , . .

    update/delete . , .

    EntityFramework.Extended :
    var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
    SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
    . , SaveChanges тАУ SQL . , - , /.

    , , dynamic ( , , IntelliTrace), . (EntityFramework ).
    10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
    , EntityFramework.Extended , . .

    navigation property
    тАУ . ┬л !┬╗ :
    var count = folder.Threads.Count();
    , navigation properties, , SQL.
    SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
    EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
    var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
    SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
    , , , , , ┬л ┬╗.


    тАУ , .

    :
    Response.Cache.SetLastModified(lastUpdated);
    lastUpdated тАУ , .
    , ASP.NET MVC ToUniversalTime() , :
    if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
    тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

    EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

    RequiredAttribute
    EF.

    , Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

    , -, ?
    var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
    , - . DbEntityValidationException .

    RequiredAttribute , null, . , , .

    : (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

    (tl;dr)
    EF - ? . , Microsoft - EF.

    , EF , , . , , , EF.

    EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

    , , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
   IQueryable    ,  ,     ,   Linq2Entities,     .    (--)    . ,      extension methods  IQueryable   ,    . 

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .
IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

IQueryable , , , Linq2Entities, . (--) . , extension methods IQueryable , .

Find
. Find , . , context.Messages.Find(1) , . . , .
context.Accounts.Load(); // - var m = context.Messages.First(); Console.WriteLine(m.Owner.Name);
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Account] AS [Extent1] GO SELECT TOP (1) [c].[Id] AS [Id], [c].[IsRead] AS [IsRead], [c].[Date] AS [Date], [c].[Text] AS [Text], [c].[Thread_Id] AS [Thread_Id], [c].[Owner_Id] AS [Owner_Id], [c].[Sender_Id] AS [Sender_Id], [c].[Receiver_Id] AS [Receiver_Id] FROM [dbo].[Message] AS [c]
context.Messages.Include(f=>f.Owner).First() . : Include SQL-, .

, , , , context.Set().Local, , . SaveChanges . . Linq2Sql.

: 1000 EF 2-3 , Linq2Sql. , API , Linq2Sql .


. Add Added . SubmitChanges , INSERT . navigation property, , Added ( ).

:
ValidateOnSaveEnabled AutoDetectChangesEnabled . . . , GC . , 100 .
StackOverflow .
EF , ( ) Linq2Sql. , , Linq2Sql.


.NET ORM-. Bulk-. , SQL , ORM .
, . EF :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); foreach (var m in messages) m.IsRead = true; context.SaveChanges();
SQL SELECT [Extent1].[Id] AS [Id], [Extent1].[IsRead] AS [IsRead], [Extent1].[Date] AS [Date], [Extent1].[Text] AS [Text], [Extent1].[Thread_Id] AS [Thread_Id], [Extent1].[Owner_Id] AS [Owner_Id], [Extent1].[Sender_Id] AS [Sender_Id], [Extent1].[Reciever_Id] AS [Reciever_Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 update [dbo].[Message] set [IsRead] = @0 where ([Id] = @1) --(N )
-, , . , , , тАУ . , , . .

update/delete . , .

EntityFramework.Extended :
var messages = context.Messages.Where(f=>f.Thread.Id == threadId); messages.Update(f => new Message {IsRead = true});
SQL UPDATE [dbo].[Message] SET [IsRead] = @p__update__0 FROM [dbo].[Message] AS j0 INNER JOIN ( SELECT [Extent1].[Id] AS [Id] FROM [dbo].[Message] AS [Extent1] WHERE [Extent1].[Thread_Id] = @p__linq__0 ) AS j1 ON (j0.[Id] = j1.[Id])
. , SaveChanges тАУ SQL . , - , /.

, , dynamic ( , , IntelliTrace), . (EntityFramework ).
10 , 10000 , EntityFramework 8 935 EntityFramework.Extended 28 83
, EntityFramework.Extended , . .

navigation property
тАУ . ┬л !┬╗ :
var count = folder.Threads.Count();
, navigation properties, , SQL.
SQL SELECT [Extent2].[Id] AS [Id], [Extent2].[Subject] AS [Subject] FROM [dbo].[ThreadsInFolders] AS [Extent1] INNER JOIN [dbo].[MessageThread] AS [Extent2] ON [Extent1].[MessageThread_Id] = [Extent2].[Id] WHERE [Extent1].[MessageFolder_Id] = @EntityKeyValue1
EF, Linq2Sql, Count() , Any() , , navigation property, . , ┬л┬╗ . , , :
var count = context.Threads.Count(f => f.Folders.Any(e => e.Id == folder.Id)));
SQL SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[MessageThread] AS [Extent1] WHERE EXISTS (SELECT 1 AS [C1] FROM [dbo].[ThreadsInFolders] AS [Extent2] WHERE ([Extent1].[Id] = [Extent2].[MessageThread_Id]) AND ([Extent2].[MessageFolder_Id] = @p__linq__0) ) ) AS [GroupBy1]
, , , , , ┬л ┬╗.


тАУ , .

:
Response.Cache.SetLastModified(lastUpdated);
lastUpdated тАУ , .
, ASP.NET MVC ToUniversalTime() , :
if (utcDate > DateTime.UtcNow) { throw new ArgumentOutOfRangeException("utcDate"); }
тАУ , DateTime Kind DateTimeKind.Undefined ( , , - UTC ). , , ( DateTimeKind ), ToUniversalTime() ToLocalTime() . , GMT - N.

EF, Linq2Sql , , . , code first . ObjectMaterialized ( ) . DateTime , ComplexType , reference type.

RequiredAttribute
EF.

, Owner , Sender , Receiver Thread Required . -, , NOT NULL , -, EF.

, -, ?
var message = context.Messages.Find(1); message.IsRead = true; context.SaveChanges();
, - . DbEntityValidationException .

RequiredAttribute , null, . , , .

: (), (), try-catch SaveChanges catch (), , (), RequiredAttribute NOT NULL Fluent API. , , , , , ( Required null UPDATE ). , , .

(tl;dr)
EF - ? . , Microsoft - EF.

, EF , , . , , , EF.

EF Linq2Sql? , , . code first ( ), . , ( EF6 ). -- ( , ) .. ORM- EF тАУ .

, , - Entity Framework. // , . .

Source: https://habr.com/ru/post/In164483/


All Articles