簡體   English   中英

我的代碼優先方法中的錯誤我在VS 2010中安裝了EF 4.1

[英]Error in my code first approach i have EF 4.1 with VS 2010

1)我有Enttiy類,其中有三個表,其代碼如下

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Web;

namespace GridWithInlineEdit.Models
{
    #region ENTITY BLOCK
    [Table("TBLUSER", Schema = "orient")]
    public  class Users
    {
        public Users()
        {
            UsersDetailCollection = new List<Usersdetail>();
        }
        //
        [Key, Column("UID", TypeName = "INT")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Uid { get; set; }

        [Required]
        [StringLength(50, MinimumLength = 10, ErrorMessage = "Please Enter {0} Upto 50 Characters!")]
        [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed here!")]
        [Column("FNAME", TypeName = "nvarchar")]
        public string Fname { get; set; }

        [Required]
        [StringLength(100, MinimumLength = 10, ErrorMessage = "Please Enter {0} Upto 50 Characters!")]
        [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed here!")]
        [Column("LNAME", TypeName = "nvarchar")]
        public string Lname { get; set; }



        public ICollection<Usersdetail> UsersDetailCollection { get; set; }

    }

    [Table("TBLUSERDETAIL", Schema = "orient")]
    public  class Usersdetail
    {
        public Usersdetail()
        {
            CountryCollection = new List<Countries>();
        }
        [Key, Column("ID", TypeName = "INT")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }


        [StringLength(100)]
        [Column("EMAIL", TypeName = "VARCHAR")]
        public String Email { get; set; }

        [StringLength(11)]
        [Column("PHONE", TypeName = "VARCHAR")]
        public String Phone { get; set; }

        [Required]
        public int? UserId { get; set; }

        [ForeignKey("UserId"), Column("UID", TypeName = "INT")]
        public virtual Users Users { get; set; }

        [Required]
        public int? CountryId { get; set; }

        [ForeignKey("CountryId"), Column("CID", TypeName = "INT")]
        public virtual Countries Countries { get; set; }




        public ICollection<Countries> CountryCollection { get; set; }
    }

    [Table("TBLCOUNTRY", Schema = "orient")]
    public class Countries
    {
        [Key, Column("CID", TypeName = "INT")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Cid { get; set; }

        [StringLength(50)]
        [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed here!")]
        [Column("CNAME", TypeName = "VARCHAR")]
        public String Cname { get; set; }

    }
    #endregion



    #region ENTITY MAPPING BLOCK
    public class UserMap : EntityTypeConfiguration<Users>
    {
        #region Constructors and Destructors

        internal UserMap()
        {
            // Primary Key
            HasKey(t => t.Uid);
            Property(p => p.Uid).HasColumnName("UID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
            // Table & Column Mappings
            ToTable("TBLUSER");
            Property(t => t.Fname).HasColumnName("FNAME").HasMaxLength(50);
            Property(t => t.Lname).HasColumnName("LNAME").HasMaxLength(50);
        }
        #endregion
    }

    public class UserDetailMap : EntityTypeConfiguration<Usersdetail>
    {
        #region Constructors and Destructors

        internal UserDetailMap()
        {
            // Primary Key
            HasKey(t => t.ID);
            HasKey(t => t.UserId);
            HasKey(t => t.CountryId);

            // Properties
            Property(t => t.Email).HasMaxLength(100);
            Property(t => t.Phone).HasMaxLength(11);

            // Column Mappings
            ToTable("TBLUSERDETAIL");
            Property(t => t.ID).HasColumnName("ID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
            Property(t => t.Email).HasColumnName("EMAIL");
            Property(t => t.Phone).HasColumnName("PHONE");
            Property(t => t.UserId).HasColumnName("UID");
            Property(t => t.CountryId).HasColumnName("CID");

            // Relationships
            HasOptional(t => t.Users).WithMany().HasForeignKey(d => d.UserId);
            HasOptional(t => t.Countries).WithMany().HasForeignKey(d => d.CountryId);
        }

        #endregion
    }


    public class CountryMap : EntityTypeConfiguration<Countries>
    {
        #region Constructors and Destructors
        internal CountryMap()
        {
            // Primary Key
            HasKey(t => t.Cid);
            // Properties
            Property(t => t.Cname).HasMaxLength(50);
            // Column Mappings
            Property(t => t.Cid).HasColumnName("CID").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
            Property(t => t.Cname).HasColumnName("CNAME");
        }
        #endregion
    }
    #endregion

}

2)第二個是Init類,其中具有使用sqlserver 2005自定義的連接字符串

連接字符串類代碼如下

using System;
using System.Data.Common;
using System.Data.Entity.Infrastructure;

namespace GridWithInlineEdit.Models
{
    public static class Constants
    {
        public static string ConnectionString
        {
            get { return GetDecryptedConnectionString(); }
        }

        private static string GetDecryptedConnectionString()
        {
            return @"Data Source=193.193.193.254;Initial Catalog=EFCFUsersdb;;USER ID=sa;PASSWORD=123;Persist Security Info=True";
        }
    }

    class EncryptedIDbConnectionFactory : IDbConnectionFactory
    {
        #region Private Fields

        IDbConnectionFactory _connectionFactory;

        #endregion

        #region Constructors

        public EncryptedIDbConnectionFactory(IDbConnectionFactory dbConnectionFactory)
        {
            if (dbConnectionFactory == null)
            {
                throw new ArgumentNullException("dbConnectionFactory can not be null");
            }

            _connectionFactory = dbConnectionFactory;
        }

        #endregion

        #region IDbConnectionFactory implementation
        public DbConnection CreateConnection(string nameOrConnectionString)
        {
            //decryption of connection string
            string decryptedConnectionString =
                GetDecryptedConnectionString(nameOrConnectionString);

            return _connectionFactory.CreateConnection(decryptedConnectionString);
        }
        #endregion

        #region Private Methods
        private string GetDecryptedConnectionString(string nameOrConnectionString)
        {
            //use some encryption library to decrypt
            return nameOrConnectionString;
        }
        #endregion
    }
}

和初始化類低於給定

using System.Data.Entity;


namespace GridWithInlineEdit.Models
{
    public class Init : DropCreateDatabaseIfModelChanges<SampleContext>
    {
        protected override void Seed(SampleContext context)
        {
            base.Seed(context);

            //context.Locations.Add(new Location() { LocationName = "Khanna, LDH" });
            //context.Sessions.Add(new Session() { SessionName = "Entity Framework" });

            context.SaveChanges();
        }
    }
}

3)這是samplecontext類的代碼

using System.Data.Entity;
using System.Data.SqlClient;

namespace GridWithInlineEdit.Models
{
    public class SampleContext : DbContext
    {

        public SampleContext()
            : base(new SqlConnection(Constants.ConnectionString) ,false)
            //Data Source=193.193.193.254;Initial Catalog=EFCFUsersdb;Persist Security Info=True;User ID=sa;Password=123
        {
            Configuration.ProxyCreationEnabled = true;
            Configuration.AutoDetectChangesEnabled = true;
        }
        public DbSet<Users> User { get; set; }
        public DbSet<Usersdetail> UserDetail { get; set; }
        public DbSet<Countries> Country { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Configurations.Add(new UserMap());
            modelBuilder.Configurations.Add(new UserDetailMap());
            modelBuilder.Configurations.Add(new CountryMap());

        }




    }
}

4)在應用程序的全局文件中有以下代碼

using System.Data.Entity;
using System.Web.Mvc;
using System.Web.Routing;
using GridWithInlineEdit.Models;

namespace GridWithInlineEdit
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "User", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        protected void Application_Start()
        {

            //Database.DefaultConnectionFactory = new EncryptedIDbConnectionFactory(Database.DefaultConnectionFactory);
            Database.SetInitializer<SampleContext>(new Init());
            AreaRegistration.RegisterAllAreas();
            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }
    }

}

在我的家庭控制器中有以下給定的代碼

> 1. using System.Web.Mvc; using GridWithInlineEdit.Models;
>     
>     namespace GridWithInlineEdit.Controllers {
>         public class UserController : Controller
>         {
>     
>     
>             public ActionResult Index()
>             {
>                 var db = new SampleContext();
>                 return View();
>             }
>     
>             [HttpPost]
>             public ActionResult Create()
>             {
>                 
>                 //return View();
>                 return null;
>             }
>     
>         } }

現在的問題是,無論何時未運行我的應用程序數據庫,當我通過在索引操作結果上放置斷點來查看_db對象中的添加監視時,都顯示異常服務器版本屬性。 請解決或給出解決方案,我已經嘗試了很多次,但是我很困惑為什么會這樣

我知道您在上面的評論中已經應用了Windows Server補丁並使其正常運行,但是在查看您的項目時,我有一些發現:

  • 控制器的“創建”方法中沒有添加新記錄的內容
  • 沒有“讀取”方法可以將數據返回到可能想要讀取數據的任何對象(例如Kendo網格)。
  • 沒有用於刪除數據記錄的“刪除”方法。
  • 我不確定Application_Start上的UserMap,DetailMap和CountryMap以及您的“ RegisterRoutes”等用於什么用途-對我來說,這似乎是一種使情況過於復雜的嚴重案例。
  • 沒有發布視圖(表示層)代碼。

也許您稍后在工作時修復了“創建”,“讀取”和“刪除”例程,也許UserMap,DetailMap,CountryMap和Init都是出於某些目的,但是如果我能對您的工作做些了解,那該死的在做。 我沒有看到將數據拖入的View代碼,網格或其他格式。 當尋求幫助時,只是說,上下文就是一切。

盡管您需要獲取並安裝Telerik的Kendo UI MVC組件,但值得看一下此博客,以在MVC中設置實體框架並准備一個網格來接收數據: http://docs.telerik。 com / kendo-ui /入門/使用kendo-with / aspnet-mvc / helpers / grid / ajax-binding

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM