2013-07-08 3 views
0

У меня есть проект MVC с классом User, который обозначен [Serializable].MongoRepository Entity в StateServer

Этот класс User наследует от MongoRepository's «Entity», как указано в документации.

Однако, когда я пытаюсь сохранить экземпляр класса User для сеанса, через StateServer, я получаю сообщение об ошибке, что объект не является сериализуемым.

Я новичок в MongoDB и MongoRepository, поэтому я не уверен, есть ли что-то, что я могу сделать здесь, чтобы сделать экземпляр класса пользователя сериализуемым.

Пример кода:

[Serializable] 
public class SiteUser : Entity 
{ 
    public string username { get; set; } 
} 

public ActionResult Index() 
{ 
    MongoRepository<SiteUser> userRepo = new MongoRepository<SiteUser>(); 
    SiteUser user = userRepo.First(m => m.username == "myusername"); 
    Session["MyUser"] = user; // This won't work due to the "Entity" link. 
    return View(); 
} 
+0

Почему бы просто не сохранить имя пользователя и не кешировать экземпляр 'SiteUser'? – WiredPrairie

+0

Базовый класс не 'Serializable.' Все классы должны быть отнесены. – WiredPrairie

ответ

1

Реализовать IEntity, интерфейс, вместо того, чтобы наследовать от Entity, так что вы не в зависимости от BaseClass сущностей.

[Serializable] 
public class SiteUser : IEntity 
{ 
    public string Id { get; set; } 
    public string username { get; set; } 
} 

Кроме того, поскольку 1.5.1 Entity класс also marked as serializable.

+0

Роб, спасибо за ответ. Это то, что мне нужно было сделать, чтобы двигаться вперед, но ваш пример должен иметь это выше свойства Id: [BsonRepresentation (BsonType.ObjectId)] –

+0

"* Но ваш пример должен иметь это выше свойства Id ... * ": Как я писал [здесь] (https://mongorepository.codeplex.com/workitem/1444):« * no it does not * », * ваш * код/​​проекты нуждается в этом, но это не требуется * by определение *, что вы подразумеваете ;-) Идентификатор не * имеет * объект ObjectId. Это может быть что угодно: от GUID до кода ISO3166 до номера телефона, электронной почты, whatever_floats_your_boat. Вот почему IEntity существует в первую очередь ;-) – RobIII

Смежные вопросы