SecurityException:请求失败。 - 实体框架代码优先(Sql Compact 4)

时间:2011-07-14 23:16:23

标签: asp.net-mvc-3 razor ef-code-first security sql-server-ce-4

  1. 我使用以下类创建了程序集(dll)
  2. Person.cs

    [Table("People")]
    public class Person
    {
        [Key]
        public int ID { get; set; }
        public string Name { get; set; }
    
    }
    

    DataContext.cs

    public class DataContext : DbContext
    {
        public DbSet<Person> People { get; set; }
    
        public DataContext()
            : base("name=DataConnection")
        {
    
        }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            base.OnModelCreating(modelBuilder);
        }
    }
    

    Calc.cs

    public class Calc
    {
        public int Sum(int num1, int num2)
        {
            return num1 + num2;
        }
    }
    

    使用Nuget安装了以下软件包:

      

    Install-Package EFCodeFirst.SqlServerCompact

    1. 我创建了一个新的网站MVC 3
    2. 我添加了对之前创建的

      的dll引用

      我在HomeController

      上修改了以下操作

      HomeController.cs

      public ActionResult Index()
      {
          ViewBag.Message = "Sample Security Error";
          return View();
      }
      
      public ActionResult Sum(int num1, int num2)
      {
          ViewBag.Message = "Sample Security Error";
          return View("Index", num1 + num2);
      }
      

      添加了新控制器

      PeopleController.cs

      public ActionResult Index()
      {
          using (var db = new DataContext())
          {
              var people = from p in db.People
                              select p;
      
              return View(people.ToList());
          }
      }
      

      我使用以下代码更改了View/Home

      Index.cshtml

      @model int?
      @{
          ViewBag.Title = "Home Page";
      }
      
      <h2>@ViewBag.Message</h2>
      @Html.ActionLink("Sum", "Sum", new { num1 = 2, num2 = 4})
      @if (Model.HasValue)
      { 
          <p>The value is: @Model.Value</p>
      }
      else
      { 
          <p>No value</p>
      }
      

      View/People

      Index.cshtml

      @model IEnumerable<Error.SecurityException.Model.Person>
      @{
          ViewBag.Title = "People";
      }
      
      <h2>@ViewBag.Title</h2>
      <ul>
      @foreach (var item in Model)
      {
          <li>@item.Name</li>
      }
      </ul>
      

      在Web.config中我添加了连接字符串

      <connectionStrings>
        <add name="DataConnection" connectionString="Data Source=|DataDirectory|Data.sdf;" providerName="System.Data.SqlServerCe.4.0" />
      </connectionStrings>
      

      App_Data文件夹创建了数据库Data.sdf,其结构与Person.cs类相同。

      使用Nuget安装了以下软件包:

        

      Install-Package EFCodeFirst.SqlServerCompact

      结果

      本地IIS中的代码运行良好!

      总和值

      Sum value

      展示人员

      Dados do Data.sdf

      错误

      当我发布网站时,在尝试显示人员时,会显示安全错误消息;

        

      System.Security.SecurityException:请求失败。

      总和值通常都已完成!

      我发布了项目this地址。

      点击People菜单,您会看到错误!

      压缩示例项目并发布在this address

      我很感激帮助!

3 个答案:

答案 0 :(得分:0)

由于我无法打开您的解决方案,因为它已配置为在IIS中运行...您可以添加;

<trust level="Medium"/> 

在您的本地项目web.config(在system.web下)并在本地运行它?你得到同样的错误吗?如果你这样做,那就是部分信任问题!

马特

答案 1 :(得分:0)

此错误已在实体框架的4.1版中修复! 这是他们的实体框架CF的错误

答案 2 :(得分:0)

我来到这里寻找在我自己的ASP.Net MVC应用程序中被触发的安全异常。虽然我的问题可能不完全相同(它在运行任何调用DbContext的页面时引发了System.Configuration.ConfigurationPermission)但我发现了一个简单的解决方案,可能适用于许多情况。我更改了我的web.config,在自定义部分添加了requirePermission =“false”,如下所示:

  <configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

希望这可以帮助有同样问题的人。