рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ 5 рдХреЗ рд╕рд╛рде рдбрд╛рдпрдирд╛рдорд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛



рд╢реБрдн рджреЛрдкрд╣рд░

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 4.5 рдХрд╛ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИред

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

рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдИрдПрдл 5 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред

рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ 5.0 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ



рдпрд╣ рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдиреЗ рдореБрдЭреЗ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдкреА рджреА рд╣реИред
рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рд░


рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдореИрдВ ASP.NET рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ( рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЙрдкрдХрд░рдг рдЬреЛ рдордЪрд╛рди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ)ред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд░реНрд╕реНрдЯ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рднреА, рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯрдмреЛрдирдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп рдбреАрдмреАрд╕реАрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдерд╛ред рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ ObjectContext рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдзрд╛рд░ рд╕рдВрджрд░реНрдн рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореБрдЭреЗ рдкреНрд░рдгрд╡ рд░рд╕реНрддреЛрдЧреА рдХреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рдорд┐рд▓рд╛,

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдЬреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдВрдЯрд┐рдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

DbContext- рдЖрдзрд╛рд░рд┐рдд рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ASP.NET рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдирдП рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рд╛рде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рд╕рд░рд▓ рдХрджрдо рдЙрдард╛рдиреЗ рд╣реЛрдВрдЧреЗред

1. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ Global.asax рдХреЛрдб рдмрджрд▓реЗрдВ

DefaultModel.RegisterContext(() => { return ((IObjectContextAdapter)new YourContextType()).ObjectContext; }, new ContextConfiguration() { ScaffoldAllTables = true }); 


2. рдбрд╛рдпрдиреЗрдорд┐рдХрдбреЗрдЯрд╛ \ рдлрд╝реАрд▓реНрдбрдЯреИрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб ManyToMany.ascx.cs рдмрджрд▓реЗрдВ

  protected override void OnDataBinding(EventArgs e) { base.OnDataBinding(e); object entity; ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor; if (rowDescriptor != null) { // Get the real entity from the wrapper entity = rowDescriptor.GetPropertyOwner(null); } else { entity = Row; } // Get the collection and make sure it's loaded var entityCollection = Column.EntityTypeProperty.GetValue(entity, null); var realEntityCollection = entityCollection as RelatedEnd; if (realEntityCollection != null && !realEntityCollection.IsLoaded) { realEntityCollection.Load(); } // Bind the repeater to the list of children entities Repeater1.DataSource = entityCollection; Repeater1.DataBind(); } public override Control DataControl { get { return Repeater1; } } 


3. рдбрд╛рдпрдиреЗрдорд┐рдХрдбреЗрдЯрд╛ \ Fieldtemplates рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб ManyToMany_Edit.ascx.cs рдмрджрд▓реЗрдВ


 protected ObjectContext ObjectContext { get; set; } public void Page_Load(object sender, EventArgs e) { // Register for the DataSource's updating event EntityDataSource ds = (EntityDataSource)this.FindDataSourceControl(); ds.ContextCreated += (_, ctxCreatedEnventArgs) => ObjectContext = ctxCreatedEnventArgs.Context; // This field template is used both for Editing and Inserting ds.Updating += DataSource_UpdatingOrInserting; ds.Inserting += DataSource_UpdatingOrInserting; } void DataSource_UpdatingOrInserting(object sender, EntityDataSourceChangingEventArgs e) { MetaTable childTable = ChildrenColumn.ChildTable; // Comments assume employee/territory for illustration, but the code is generic if (Mode == DataBoundControlMode.Edit) { ObjectContext.LoadProperty(e.Entity, Column.Name); } // Get the collection and make sure it's loaded dynamic entityCollection = Column.EntityTypeProperty.GetValue(e.Entity, null); // Go through all the territories (not just those for this employee) foreach (dynamic childEntity in childTable.GetQuery(e.Context)) { // Check if the employee currently has this territory var isCurrentlyInList = ListContainsEntity(childTable, entityCollection, childEntity); // Find the checkbox for this territory, which gives us the new state string pkString = childTable.GetPrimaryKeyString(childEntity); ListItem listItem = CheckBoxList1.Items.FindByValue(pkString); if (listItem == null) continue; // If the states differs, make the appropriate add/remove change if (listItem.Selected) { if (!isCurrentlyInList) entityCollection.Add(childEntity); } else { if (isCurrentlyInList) entityCollection.Remove(childEntity); } } } private static bool ListContainsEntity(MetaTable table, IEnumerable<object> list, object entity) { return list.Any(e => AreEntitiesEqual(table, e, entity)); } private static bool AreEntitiesEqual(MetaTable table, object entity1, object entity2) { return Enumerable.SequenceEqual( table.GetPrimaryKeyValues(entity1), table.GetPrimaryKeyValues(entity2)); } protected void CheckBoxList1_DataBound(object sender, EventArgs e) { MetaTable childTable = ChildrenColumn.ChildTable; // Comments assume employee/territory for illustration, but the code is generic IEnumerable<object> entityCollection = null; if (Mode == DataBoundControlMode.Edit) { object entity; ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor; if (rowDescriptor != null) { // Get the real entity from the wrapper entity = rowDescriptor.GetPropertyOwner(null); } else { entity = Row; } // Get the collection of territories for this employee and make sure it's loaded entityCollection = (IEnumerable<object>)Column.EntityTypeProperty.GetValue(entity, null); var realEntityCollection = entityCollection as RelatedEnd; if (realEntityCollection != null && !realEntityCollection.IsLoaded) { realEntityCollection.Load(); } } // Go through all the territories (not just those for this employee) foreach (object childEntity in childTable.GetQuery(ObjectContext)) { // Create a checkbox for it ListItem listItem = new ListItem( childTable.GetDisplayString(childEntity), childTable.GetPrimaryKeyString(childEntity)); // Make it selected if the current employee has that territory if (Mode == DataBoundControlMode.Edit) { listItem.Selected = ListContainsEntity(childTable, entityCollection, childEntity); } CheckBoxList1.Items.Add(listItem); } } public override Control DataControl { get { return CheckBoxList1; } } 


рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдбрд╛рдпрдирд╛рдорд┐рдХ рдбреЗрдЯрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ рдФрд░ рдЖрдк рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


рдиреАрдЪреЗ рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд▓рд┐рдВрдХ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред

Source: https://habr.com/ru/post/In150012/


All Articles