Entity Framework 4.2 "Тип не приписывается EdmEntityTypeAttribute, но содержится в сборке, приписанной EdmSchemaAttribute - PullRequest
8 голосов
/ 13 декабря 2011

Я получаю следующую ошибку:

System.InvalidOperationException не обработано. Message = тип «Судья» не приписывается EdmEntityTypeAttribute, но содержится в сборке с атрибутом EdmSchemaAttribute. POCO лица, которые не используйте EdmEntityTypeAttribute не может содержаться в том же сборка как объекты, отличные от POCO, которые используют EdmEntityTypeAttribute.
Source = EntityFramework StackTrace: в System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType (Type тип объекта) в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (Type EntityType) ....

 public class GenericRepository<TEntity> where TEntity : class
{
    internal z context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(z context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    public GenericRepository()
    {
        this.context = new z();
        this.dbSet = context.Set<TEntity>();
    }

    public virtual IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")
    {

        IQueryable<TEntity> query = dbSet;

        if (filter != null)
        {
            query = query.Where(filter);
        }

        foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
        {
            query = query.Include(includeProperty);
        }

        if (orderBy != null)
        {
            return orderBy(query).ToList();
        }
        else
        {
            return query.ToList(); //Getting error here!!
        }
    }

    public virtual TEntity GetByID(object id)
    {
        return dbSet.Find(id);
    }

    public virtual void Insert(TEntity entity)
    {
        dbSet.Add(entity);
    }

    public virtual void Delete(object id)
    {
        TEntity entityToDelete = dbSet.Find(id);
        Delete(entityToDelete);
    }

    public virtual void Delete(TEntity entityToDelete)
    {
        if (context.Entry(entityToDelete).State == EntityState.Detached)
        {
            dbSet.Attach(entityToDelete);
        }
        dbSet.Remove(entityToDelete);
    }

    public virtual void Update(TEntity entityToUpdate)
    {
        dbSet.Attach(entityToUpdate);
        context.Entry(entityToUpdate).State = EntityState.Modified;
    }

    public virtual void Save()
    {
        context.SaveChanges();
    }
}

Странная часть: Judge приписывается атрибуту EdmEntityTypeAttribute, потому что он автоматически генерируется как часть джаза DbContext T-4.

    /// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="standaloneModel", Name="Judge")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Judge : EntityObject
{

В какой-то момент у меня был другой класс Судья в другой сборке, но с тех пор я переименовал его. Я пытался очистить оба проекта. Не должно быть никакого другого класса Судьи кроме EF.

Так что я не могу понять, откуда взялся этот другой класс Судьи ??

Спасибо

Ответы [ 2 ]

15 голосов
/ 13 декабря 2011

Понял.

Когда я впервые запустил программу, я использовал ObjectContext с .edmx.

Затем я прочитал о EF 4.2 и решил использовать DbContext.

Проблема заключалась в том, что мой файл .edmx генерировал классы, а также DbContext T-4s.

Решением было отключить генерацию кода в .edmx.

Так что теперь только классы DbContext T-4 генерируют мои классы POCO.

Надеюсь, что эти вопросы помогут кому-то еще в будущем!

0 голосов
/ 17 февраля 2013

У меня была похожая проблема - кажется, что в некоторых случаях (например, при использовании WCF Data Services 5.2.0) проблема заключается в том, чтобы классы code-first / DbContext находились в той же сборке, что и EDMX / model-first/ сгенерированные классы.Для меня перемещение классов DbContext в отдельную сборку устранило проблему.

Обратите внимание, что у меня не было проблемы с кодом сначала + модель первым в той же сборке при обращении к БД.Но как только я добавил еще один слой (службы данных WCF), я столкнулся с ошибкой EdmSchemaAttribute.

...