0

1)我有Enttiy类在其中有三个表,其代码在下面给出错误在我的代码第一种方法我有EF 4.1 VS 2010

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)第二是初始化类,其中与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 
    } 
} 

和Init类下面给出

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对象添加手表对索引操作结果。 请请解决或给出解决方案,我已经尝试了这么多时间,但我很困惑,为什么这种情况发生

+0

SQL Server 2005中的第一个代码比较新的SQL Server版本更难以正确获取。该版本的任何特定原因? – 2013-04-27 07:07:42

+0

你对EF的配置是什么?你尝试删除自定义连接的东西 - 只是让它创建默认数据库,或使用不同的供应商等 – NSGaga 2013-04-27 18:56:33

+0

@NSGaga我已经尽了一切努力,但没有得到任何结果。 – 2013-04-29 03:58:17

回答

0

我知道你有上面说的意见,你应用在Windows Server补丁,并得到了它的工作,但在看你的项目,我有一些意见:

  • 没有什么在你的“创建”方法在你的控制器添加 新记录
  • 没有将数据返回任何 可能不想要“读”的方法读取数据,如Kendo网格。
  • 删除数据记录没有“删除”方法。
  • 我不确定UserMap,DetailMap和CountryMap用于什么,以及Application_Start上的“RegisterRoutes”等 - 这些看起来像是对我来说过分复杂的严重情况。
  • 未发布视图(表示层)代码。

也许你固定的创建,读取和删除程序后,当你得到它的工作,也许用户映射,DetailMap,CountryMap,并初始化所有的人的东西,但如果我可以让被定罪元首或 - 你正在做什么的尾巴。我看不到任何查看代码,网格或其他方式,您正在将数据放入。在寻求帮助时,只是说,环境就是一切。

当你需要获取并安装Telerik的剑道UI MVC组件,它可能是值得的,你看看这个博客建立在MVC的实体框架和准备网格用于接收数据: http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/ajax-binding