Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用MVC和实体框架时,如何将模型排除在数据库之外_C#_Asp.net Mvc_Entity Framework_Paypal - Fatal编程技术网

C# 在使用MVC和实体框架时,如何将模型排除在数据库之外

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

我目前正在使用SQLServerDB和CodeFirstEF编写一个.NETMVC应用程序。一切进展顺利,stackoverflow非常有帮助。不幸的是,我有一个无法解决的问题,我在互联网上找不到任何帮助

我想与PayPal集成,我一直在关注这一点,这似乎是相当直接的,除了VS想为我的PayPal模型创建一个数据库表,我不需要也不想这样做。我在类前面添加了
[NotMapped]
,但现在它会生成以下错误:

未映射类型“MyApp.Models.PayPal”。检查是否未使用Ignore方法或NotMappeAttribute数据批注明确排除该类型。验证该类型是否定义为类、是否为基元或泛型,以及是否从EntityObject继承

我在数据库上下文的
OnModelCreating()
方法中看到了一些关于添加Ignore(lambda表达式)的其他信息,但这似乎是为了排除一列,而不是整个类


有什么想法吗?我不希望应用程序中的每个模型都有一个数据库表。

您对
[NotMapped]
属性的使用是正确的。问题是,(a)您试图在该属性生效时构建数据库,或者(b)您试图在运行时访问与该类型相关的数据库。这就是我在测试工作中看到这个错误的时候(见下文)

在设计结束时,如果您使用自动脚手架,以下内容将解决您的问题(请参见下文):

  • 在面向PayPal的类中删除或注释掉
    [NotMapped]
  • 重新编译。(由于MVC对代码的内省延迟, 在执行此操作之前,您的“过去”属性仍然有效。)
  • 现在做你的脚手架
  • 现在取消注释或重新添加
    [NotMapped]
  • 出于与之前相同的原因重新编译
  • 如果您遇到问题,那么没有太多理由自动搭建,因为您不想保存数据,所以不需要CRUD ops。与IDE为您生成的控制器相比,refsite上的示例使用的控制器几乎为空

    在运行时结束时(即,在控制器代码中),只需确保从不触摸数据库绝对
    db.SaveChanges()不同
    
    为了验证问题和解决方案,我创建了一个示例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;}。标记为答案并向上投票,但显然我的代表太低,无法计算向上投票。衷心感谢您的快速回复。