2013-07-08 1 views
0

[Serializable]으로 표시된 User 클래스의 MVC 프로젝트가 있습니다.StateServer의 MongoRepository 엔티티

User 클래스는 설명서에 따라 MongoRepository's "Entity"클래스를 상속합니다.

그러나 User 클래스의 인스턴스를 StateServer를 통해 세션에 저장하려고하면 객체가 직렬화되지 않는다는 오류가 발생합니다.

저는 MongoDB와 MongoRepository를 처음 사용하기 때문에 여기에 사용자 클래스의 인스턴스를 serialize 할 수있는 방법이 있는지 잘 모르겠습니다.

샘플 코드 :

[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

대신 그래서 당신이 엔티티의 base class에 따라되지 않습니다 Entity 상속의, IEntity, 인터페이스를 구현합니다. 또한

[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)라고 적었습니다 :"* 아니야 * * ", * 귀하의 * 코드/프로젝트는 그것을 필요로하지만 반드시 필요하지는 않습니다 * 정의 *는 당신이 암시하는 것입니다 ;-) Id는 ObjectId *가 * 없습니다 *. GUID에서 ISO3166 코드, 전화 번호, 전자 메일 주소, whatever_floats_your_boat에 이르기까지 다양합니다. 그래서 IEntity가 처음부터 존재합니다 :-) – RobIII

관련 문제