Ошибка приведения исключения, когда я пытаюсь вставить объект в Entity Framework (используя код в первую очередь) - PullRequest
0 голосов
/ 10 февраля 2011

Я получаю исключение приведения, когда пытаюсь вставить сущность в Entity Framework (используя сначала код).

Исключение наложения похоже на «невозможно разыграть ... Collection'1 (Entity) для ввода (Entity)»

Из этого кода:

public virtual T Insert(T entity)
{
      return Context.Set<T>().Add(entity);
}

Iне могу понять почему.Я почти уверен, что все сделал правильно.

Почтовый объект

public class Post
    {
        public long PostId { get; private set; }
        public DateTime date { get; set; }
        [Required]
        public string Subject { get; set; }
        public User User { get; set; }
        public Category Category { get; set; }
        [Required]
        public string Body { get; set; }

        public virtual ICollection<Tag> Tags { get; private set; }

        public Post()
        {
            Category = new Category();
            if (Tags == null) 
                Tags = new Collection<Tag>();
        }

        public void AttachTag(string name, User user)
        {
            if (Tags.Count(x => x.Name == name) == 0)
                Tags.Add(new Tag { 
                    Name = name, 
                    User = user 
                });
            else
                throw new Exception("Tag with specified name is already attached to this post.");
        }

        public Tag DeleteTag(string name)
        {
            Tag tag = Tags.Single(x => x.Name == name);
            Tags.Remove(tag);

            return tag;
        }

        public bool HasTags()
        {
            return (Tags.Count > 0);
        }
    }

Теговый объект

public class Tag
{
    public long TagId { get; private set; }
    public string Name { get; set; }
    // Qui a ajouté le tag ?
    public User User { get; set; }
}

Отображение

public class PostMap: EntityTypeConfiguration<Post>
{
    public PostMap()
    {
        ToTable("Posts");
        HasKey(x => x.PostId);
        Property(x => x.Subject)
            .HasColumnType("varchar")
            .HasMaxLength(256)
            .IsRequired();
        Property(x => x.Body)
            .HasColumnType("text")
            .IsRequired();
        HasMany(x => x.Tags);
        HasOptional(x => x.Tags);
    }
}

class TagMap : EntityTypeConfiguration<Tag>
{
    public TagMap()
    {
        ToTable("Tags");
        HasKey(x => x.TagId);
        Property(x => x.Name)
            .HasColumnType("varchar")
            .HasMaxLength(256)
            .IsRequired();
        HasRequired(x => x.User);


}
    }

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Я нашел решение.

Вот правильный сценарий сопоставления для сообщения:

public PostMap()
        {
            ToTable("Posts");
            HasKey(x => x.PostId);
            Property(x => x.Subject)
                .HasColumnType("varchar")
                .HasMaxLength(256)
                .IsRequired();
            Property(x => x.Body)
                .HasColumnType("text")
                .IsRequired();
            HasRequired(x => x.User);
            HasMany(x => x.Tags).WithOptional();
        }

Важно указать, что коллекция тегов необязательно .Что имеет место в этом сценарии.К сообщению может быть прикреплено ноль тегов.

HasMany (x => x.Tags) .WithOptional ();

0 голосов
/ 10 февраля 2011

Пожалуйста, убедитесь, что вы передали один элемент в метод Insert, а не коллекцию, содержащую один элемент.

...