我遵循了Adam的回答here,实体框架现在可以工作了,Seed()
方法也可以工作了。
但是当我尝试像这样访问数据库时:
public User FindUserByID(int id)
{
return (from item in this.Users
where item.ID == id
select item).SingleOrDefault();
}
.............................................................................
// GET: /Main/
public ActionResult Index(int? id)
{
var db = UserDataBaseDB.Create();
if (!id.HasValue)
id = 0;
return View(db.FindUserByID(id.Value));
}
它在return (from item in this.Users
抛出一个异常,声明:
Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.BaseCs'.
我尝试用:return this.Users.ElementAt(id);
替换它,但是它抛出了这个异常。
LINQ to Entities does not recognize the method 'MySiteCreator.Models.User ElementAt[User](System.Linq.IQueryable
1MySiteCreator.Models.User,Int32)‘方法,而此方法不能转换为存储表达式。
有谁可以帮我?
谢谢!
发布于 2011-10-16 13:18:21
异常详细信息: System.Data.SqlClient.SqlException:无效的对象名称'dbo.BaseCs‘
此错误意味着EF正在将您的LINQ转换为使用名为dbo.BaseCs
的对象(最有可能是一个表)的sql语句,该对象在数据库中不存在。
检查您的数据库并验证该表是否存在,或者您是否应该使用其他表名。此外,如果您可以发布一个链接到您正在遵循的教程,它将有助于跟随您正在做的事情。
发布于 2013-07-03 00:30:54
这很可能是模型类名和表名不匹配,正如'adrift‘所提到的。当您想要保持模型类名与表名不同(我为OAuthMembership做的那样)时,请使它们相同或使用下面的示例。请注意,模型类名是OAuthMembership,而表名是webpages_OAuthMembership。
为模型提供表属性:
[Table("webpages_OAuthMembership")]
public class OAuthMembership
或者通过覆盖DBContext OnModelCreating来提供映射:
class webpages_OAuthMembershipEntities : DbContext
{
protected override void OnModelCreating( DbModelBuilder modelBuilder )
{
var config = modelBuilder.Entity<OAuthMembership>();
config.ToTable( "webpages_OAuthMembership" );
}
public DbSet<OAuthMembership> OAuthMemberships { get; set; }
}
发布于 2014-03-21 13:06:59
如果您提供这样的映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ClassificationMap());
modelBuilder.Configurations.Add(new CompanyMap());
modelBuilder.Configurations.Add(new GroupMap());
....
}
记住添加BaseCs的映射。
如果它丢失了,您将不会得到编译错误。但是当你使用实体时,你会得到一个运行时错误。
https://stackoverflow.com/questions/7784064
复制