Я пытаюсь сохранить Список пользователей в классе Разговора, но я получаю InvalidCastException
при выполнении POST.InvalidCastException при использовании Entity Framework
Это мой класс User:
public class User
{
[Key]
[DataMember]
public String Email { get; set; }
[DataMember]
public String Password { get; set; }
[DataMember]
public Boolean Admin { get; set; }
public User(String email, String password, Boolean admin)
{
Email = email;
Password = password;
Admin = admin;
}
}
И это мой разговор класс:
[DataContract]
public class Conversation
{
[Key]
[DataMember]
public string Key { get; set; }
[DataMember]
public string ConversationName { get; set; }
[DataMember]
public string Administrator { get; set; }
[DataMember]
[ForeignKey("Email")]
public List<User> Members { get; set; }
public Conversation(string key, string name, string admin, List<User> members)
{
Key = key;
ConversationName = name;
Administrator = admin;
Members = members;
}
public Conversation()
{
}
}
Это контроллер Диалог:
POST:
[HttpPost]
public async Task<IHttpActionResult> PostConversation(Conversation convo)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
foreach (var user in convo.Members)
{
db.Entry(user).State = EntityState.Unchanged;
}
db.Conversations.Add(convo);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { name = convo.Key }, convo);
}
GET:
[HttpGet]
public IQueryable<Conversation> GetConversations()
{
return db.Conversations;
}
EDIT Сообщение заявление:
{
"Key": "123",
"ConversationName": "Test",
"Administrator": "Ken",
"Members": [{"Email": "[email protected]","Password" : "Passw-1", "Admin" : "true"},
{"Email": "[email protected]","Password" : "Passw-1", "Admin" : "false"}]
}
Ошибка я получаю:
"ExceptionMessage": «Не удалось привести объект типа«System.Collections. Generic.List`1 [AcademicAssistant.Models.User] 'для ввода «AcademicAssistant.Models.User».,
Почему вы вызываете 'db.Conversations.Add' дважды? Кроме того, есть ли у вас больше информации о том, где произошла ошибка, или если вы даете какие-либо сведения о том, какое свойство является неправильным. – Steve
У вас есть 3 требуемых параметра в вашем пользовательском конструкторе (адрес электронной почты, пароль и админ). Если вы не отправляете по электронной почте, паролю и администраторам каждого участника в разговоре, он не сможет создавать ваши пользовательские объекты для каждого члена. Поскольку я не вижу, что вы на самом деле публикуете, я не могу быть уверен, но я сомневаюсь, что вы отправляете пароли для пользователей в разговоре. – randyh22
@Steve спасибо, что указали, что это была ошибка! Это свойство «членов», которое дает проблемы. Я редактировал вопрос, чтобы включить дополнительную информацию! – semiColon