Mar*_*gal 42 c# sql entity-framework asp.net-mvc-3
我在这里遵循了亚当的答案,现在实体框架正常工作,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));
}
Run Code Online (Sandbox Code Playgroud)
它引用了一个例外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.IQueryable1 [MySiteCreator.Models.User],Int32)'方法,并且此方法无法转换为商店表达式.
谁能帮我?
谢谢!
Jef*_*ata 66
异常详细信息:System.Data.SqlClient.SqlException:无效的对象名称'dbo.BaseCs'
此错误意味着EF正在将您的LINQ转换为使用命名的对象(很可能是表)的sql语句,该对象dbo.BaseCs在数据库中不存在.
检查数据库并验证该表是否存在,或者您应该使用其他表名.此外,如果您可以发布您正在关注的教程的链接,那么将有助于跟进您正在做的事情.
aca*_*lon 21
它很可能是'adrift'所提到的模型类名和表名之间的不匹配.如果要保持模型类名与表名(我为OAuthMembership所做的)不同,请使它们相同或使用下面的示例.请注意,模型类名称为OAuthMembership,而表名称为webpages_OAuthMembership.
为模型提供表属性:
[Table("webpages_OAuthMembership")]
public class OAuthMembership
Run Code Online (Sandbox Code Playgroud)
或者通过重写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; }
}
Run Code Online (Sandbox Code Playgroud)
sfs*_*sfs 12
如果您提供这样的映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ClassificationMap());
modelBuilder.Configurations.Add(new CompanyMap());
modelBuilder.Configurations.Add(new GroupMap());
....
}
Run Code Online (Sandbox Code Playgroud)
请记住为BaseC添加地图.
如果缺少编译错误,您将不会收到编译错误.但是当您使用实体时,您将收到运行时错误.
关于表名的多元化可能是个问题.您可以使用下面的代码段关闭此约定.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
Run Code Online (Sandbox Code Playgroud)
如果一切正常,请ConnectionString检查数据库上下文文件中的 DbSet 集合名称。如果那个和数据库表名不匹配,你也会收到这个错误。
例如,类别、产品
public class ProductContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
应该与实际的数据库表名匹配:
| 归档时间: |
|
| 查看次数: |
89908 次 |
| 最近记录: |