C# 在使用MVC和实体框架时,如何将模型排除在数据库之外
我目前正在使用SQLServerDB和CodeFirstEF编写一个.NETMVC应用程序。一切进展顺利,stackoverflow非常有帮助。不幸的是,我有一个无法解决的问题,我在互联网上找不到任何帮助 我想与PayPal集成,我一直在关注这一点,这似乎是相当直接的,除了VS想为我的PayPal模型创建一个数据库表,我不需要也不想这样做。我在类前面添加了C# 在使用MVC和实体框架时,如何将模型排除在数据库之外,c#,asp.net-mvc,entity-framework,paypal,C#,Asp.net Mvc,Entity Framework,Paypal,我目前正在使用SQLServerDB和CodeFirstEF编写一个.NETMVC应用程序。一切进展顺利,stackoverflow非常有帮助。不幸的是,我有一个无法解决的问题,我在互联网上找不到任何帮助 我想与PayPal集成,我一直在关注这一点,这似乎是相当直接的,除了VS想为我的PayPal模型创建一个数据库表,我不需要也不想这样做。我在类前面添加了[NotMapped],但现在它会生成以下错误: 未映射类型“MyApp.Models.PayPal”。检查是否未使用Ignore方法或Not
[NotMapped]
,但现在它会生成以下错误:
未映射类型“MyApp.Models.PayPal”。检查是否未使用Ignore方法或NotMappeAttribute数据批注明确排除该类型。验证该类型是否定义为类、是否为基元或泛型,以及是否从EntityObject继承
我在数据库上下文的OnModelCreating()
方法中看到了一些关于添加Ignore(lambda表达式)的其他信息,但这似乎是为了排除一列,而不是整个类
有什么想法吗?我不希望应用程序中的每个模型都有一个数据库表。您对
[NotMapped]
属性的使用是正确的。问题是,(a)您试图在该属性生效时构建数据库,或者(b)您试图在运行时访问与该类型相关的数据库。这就是我在测试工作中看到这个错误的时候(见下文)
在设计结束时,如果您使用自动脚手架,以下内容将解决您的问题(请参见下文):
[NotMapped]
[NotMapped]
db.SaveChanges()不同你不应该像我说的那样;这实际上是一个ViewModel,它的存在只是为了将数据推送到PayPal
为了验证问题和解决方案,我创建了一个示例MVC应用程序,获取您看到的消息,执行设计时步骤,然后在浏览器中运行该应用程序,再次获取问题消息,从我的未映射类控制器中删除了面向db的代码,并且能够正常工作。我没有使用面向PayPal的类,而是使用了一个更简单的类来节省时间,但是结果应该没有什么不同
我希望这能解决你的问题--默认情况下,所有模型都将在数据库中创建,该数据库是myappenties:DbContext
类的一部分,属性类型为DbSet
。如果您已将模型MyApp.Models.PayPal
修饰为notmapped
属性
[NotMapped]
public class PayPal
{
//your all properties
}
然后从继承自DbContext
类的类中删除Dbset
属性
public class MyAppEntities : DbContext
{
public DbSet<PayPal> paypal { get; set; } //Remove this or comment this line
...
...
//rest of your properties
}
公共类MyAppenties:DbContext
{
public DbSet paypal{get;set;}//删除此行或注释此行
...
...
//你的其他财产
}
这样做不会成为数据库的一部分,也不会出现此错误。
(对这件事的解释将涵盖整个主题,我在这里无法解释)。感谢您的详细解释。这很好,谢谢@Rajput。我没有注意到DbContext类在底部添加了public System.Data.Entity.DbSet PayPals{get;set;}。标记为答案并向上投票,但显然我的代表太低,无法计算向上投票。衷心感谢您的快速回复。