gpt4 book ai didi

entity-framework - 架构无效且类型无法加载,因为程序集包含 EdmSchemaAttribute

转载 作者:行者123 更新时间:2023-12-03 23:38:18 29 4
gpt4 key购买 nike

得到以下错误:

指定的架构无效。错误:

The types in the assembly 'x, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be loaded because the assembly contains the EdmSchemaAttribute, and the closure of types is being loaded by name. Loading by both name and attribute is not allowed.



这个错误究竟是什么意思?
我正在尝试将现有数据库中的 EF 模型硬塞到我的应用程序中。
在此应用程序基于 CodeFirst 并使用存储库模式之前,但在我的一生中,我无法使其正常工作。

在我之前:
public class BaseModelContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}

但是在 EF 模型优先的场景中(数据库中已经存在表的场景),我不得不删除这些,因为它似乎不喜欢在 DbSet 属性上使用存储库模式。
所以我去掉了这些,然后存储库可以在 .designer.cs 上下文类(EF 模型)上已经定义的类上使用存储库。这在生成的代码中设置了 EdmSchemaAttribute。

那么如何让我的存储库模式在模型优先的场景中工作呢?上述错误究竟是什么意思?

编辑

添加了新代码:
 public class BaseModelContext : DbContext
{
// public DbSet<Location> Locations { get; set; }

public BaseModelContext(string nameOrConnection)
: base(nameOrConnection)
{
}

public BaseModelContext()
{
}
}

public class VisitoriDataContext : BaseModelContext
{
public VisitoriDataContext()
: base("visitoriDataConnection")
{

}

}


public interface IVisitoriDataContextProvider
{
VisitoriDataContext DataContext { get; }
}

public class VisitoriDataContextProvider : IVisitoriDataContextProvider
{
public VisitoriDataContext DataContext { get; private set; }

public VisitoriDataContextProvider()
{
DataContext = new VisitoriDataContext();
}
}


public class VisitoriRepository<T> : IRepository<T> where T : class
{
protected readonly IVisitoriDataContextProvider _ctx;

public VisitoriRepository(IVisitoriDataContextProvider ctx)
{
_ctx = ctx;
}

public T Get(int id)
{
return _ctx.DataContext.Set<T>().Find(id);
}

}

public interface ILocationRepo : IRepository<Location>
{
IEnumerable<Location> GetSuggestedLocationsByPrefix(string searchPrefix);
}

public class LocationRepo : VisitoriRepository<Location>, ILocationRepo
{
public LocationRepo(IVisitoriDataContextProvider ctx)
: base(ctx)
{

}

public IEnumerable<Location> GetSuggestedLocationsByPrefix(string searchPrefix)
{

return Where(l => l.name.Contains(searchPrefix)).ToList();

}
}

最佳答案

该错误意味着您不能将代码优先映射(数据注释和 fluent API)和 EDMX 映射(使用 EntityObjects!)用于具有相同名称的实体。这两种方法是分离的。

你的问题的其余部分不清楚。

顺便提一句。从现有数据库构建映射称为数据库优先而不是模型优先。

关于entity-framework - 架构无效且类型无法加载,因为程序集包含 EdmSchemaAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847605/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com