другой человек ответил так же 4 года назад, и ОП сказал, что это не помогло.

едыдущая запись]Я был на пути к необходимости клонировать мои сущности. Это я пытался сделать с помощью подхода сериализации, как показано в[CodeProject]поскольку классы создаются Entity Framework, я размечаю их отдельно в пользовательском .cs, например так:.

однако при проверке (в методе клонирования):

[Serializable]
public partial class Claims
{
}

получает удар, я получаю ошибку:

if (Object.ReferenceEquals(source, null))
{

так, видимо, пока мой класс

System.ArgumentException was unhandled by user code
  Message=The type must be serializable.
Parameter name: source
  Source=Web
  ParamName=source
  StackTrace:
       at .Web.Cloner.Clone[T](T source) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Extensions.Object.cs:line 49
       at .Web.Models.Employer..ctor(User u) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Models\EF.Custom.cs:line 121
       at .Web.Controllers.AuthController.Register(String Company, String GivenName, String Surname, String Title, String Department) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Controllers\AuthController.cs:line 119
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
  InnerException: 

 Сериализуем, динамические прокси, сгенерированные EF, не ... каким-то образом мои декорации не проходят.Claimsв чем тут подвох?

* Обновление I *

для большего контекста: у меня есть класс

 который содержит свойствоUser определяется какClaims, при выполнении клонирования тип, который передается, является коллекцией, а неICollection<Claim> - это объясняет, почему клонер жалуется, что тип не сериализуем. поэтому вопрос сейчас: как мне сделатьClaim сериализуемый, так как я не могу украсить свойство?User.Claims* Обновление II *

Error   1   Attribute 'Serializable' is not valid on this declaration type.
It is only valid on 'class, struct, enum, delegate' declarations.   
C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Models\EF.Custom.cs
128 10  Website

Суть упражнения заключается в создании глубокой копии. вот как это выглядит:

для того, чтобы

public partial class Employer
{
    public Employer(User u)
    {
        this.Id = u.Id;
        this.GivenName = u.GivenName;
        this.Surname = u.Surname;
        this.Claims = u.Claims.Clone();
        this.Contacts = u.Contacts.Clone();
    }
}

 работать,u.Claims.Clone() должен быть сериализуемым, но это не по причинам, указанным выше.u.Claims* Обновление III *

хорошо, я изменил подход, реализовав конструктор следующим образом:

и теперь он проходит проверку clone () (строка «если» выше), но теперь он прерывается на:

public partial class Employer
{
    public Employer(User u)
    {
        this.Id = u.Id;
        this.GivenName = u.GivenName;
        this.Surname = u.Surname;

        ICollection<Claim> cs = new List<Claim>();
        foreach (Claim c in u.Claims)
        {
            cs.Add(c.Clone());
        }
        this.Claims = cs;

с участием:

formatter.Serialize(stream, source);

вздох ... все всегда так сложно?

System.Runtime.Serialization.SerializationException was unhandled by user code
  Message=Type 'System.Data.Entity.DynamicProxies.User_7B7AFFFE306AB2E39C07D91CC157792F503F36DFCAB490FB3333A52EA1D5DC0D' in Assembly 'EntityFrameworkDynamicProxies-Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
  Source=mscorlib
  StackTrace:
       at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
       at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
       at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
       at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
       at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
       at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
       at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
       at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)
       at Skillscore.Web.Cloner.Clone[T](T source) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Extensions.Object.cs:line 62
       at Skillscore.Web.Models.Employer..ctor(User u) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Models\EF.Custom.cs:line 130

* Обновление IV *

Итак, проблема выше в том, что

 класс имеет навигатор, который указывает наClaim - который объясняет, почему вышеупомянутый метод указывает типUser и это подразумевает, что мне нужно не только сделать сериализуемые нисходящие зависимости, но и восстановить все пути! Тем не менее, после этого я успешно клонировал объект, но теперь я возвращаюсь к проблеме в моей первоначальной публикации:.User_[...]человек. Мне нужна дыра в голове.

System.InvalidOperationException was unhandled by user code
  Message=Conflicting changes to the role 'User' of the relationship 'EF.ClaimUser' have been detected.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Objects.DataClasses.RelatedEnd.IncludeEntity(IEntityWrapper wrappedEntity, Boolean addRelationshipAsUnchanged, Boolean doAttach)
       at System.Data.Objects.DataClasses.EntityCollection`1.Include(Boolean addRelationshipAsUnchanged, Boolean doAttach)
       at System.Data.Objects.DataClasses.RelationshipManager.AddRelatedEntitiesToObjectStateManager(Boolean doAttach)
       at System.Data.Objects.ObjectContext.AddObject(String entitySetName, Object entity)
       at System.Data.Entity.Internal.Linq.InternalSet`1.<>c__DisplayClass5.<Add>b__4()
       at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
       at System.Data.Entity.DbSet`1.Add(TEntity entity)
       at Skillscore.Web.Controllers.AuthController.Register(String Company, String GivenName, String Surname, String Title, String Department) in C:\Users\.\Documents\Visual Studio 2010\Projects\.\Website\Controllers\AuthController.cs:line 138

* Обновление V *

Я не знаю, является ли проблема прокси-серверами или ленивой загрузкой, но после небольшого размышления кажется, что, если я выполняю клонирование через сериализацию, все идентификаторы вещей, которые раньше принадлежали старому объекту, теперь работают принадлежать новому. Я сделал

 сначала о старом объекте, и если это имеет непосредственный эффект, то, возможно, есть что-то в отслеживании, которое не знает об этом. Если этого не произойдет, то в один прекрасный момент появятся две вещи с одинаковым идентификатором ... поэтому я начинаю склоняться к идее @ Jockey об использовании инициализаторов объектов для клонирования ....remove()Генерируется ли пользователь EF?

Ответы на вопрос(0)

Ваш ответ на вопрос