求解 使用EF 发现只创建了数据库,木有创建表

落阳 2012-06-15 04:34:30
Menu.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace DataEntity
{
[Table("Sys_Menu")]
public class Menu
{
[Key]
[Display(Name = "菜单编号")]
[Column(Order = 0)]
[Required(ErrorMessage = "菜单编号必须提供")]
public int MenuID { get; set; }

[Display(Name = "菜单名称")]
[Column(Order = 1)]
[Required(ErrorMessage = "菜单名称必须提供")]
[StringLength(50, ErrorMessage = "不能超过50个字符")]
public string MenuName { get; set; }

[Display(Name = "排序号")]
[Column(Order = 2)]
[Required(ErrorMessage = "排序号必须提供")]
[MaxLength(3, ErrorMessage = "排序号长度不能超过3位")]
public int OrderCode { get; set; }

[Display(Name = "访问地址")]
[Column(Order = 3)]
[StringLength(100, ErrorMessage = "访问地址不能超过100个字符")]
public string Url { get; set; }

[Display(Name = "父菜单")]
[Column(Order = 4)]
[Required(ErrorMessage = "父菜单必须提供")]
public int ParentID { get; set; }

/// <summary>
/// 1个菜单有1个或多个功能点
/// </summary>
public virtual ICollection<Function> Functions { get; set; }
}
}


Function.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace DataEntity
{
[Table("Sys_Function")]
public class Function
{
/// <summary>
/// 主键ID
/// </summary>
[Key]
public int FunctionID
{
get;
set;
}

/// <summary>
/// 模块ID
/// </summary>
public int MenuID
{
get;
set;
}

/// <summary>
/// 功能编码
/// </summary>
public string FunctionCode
{
get;
set;
}

/// <summary>
/// 功能名称
/// </summary>
public string FunctionName
{
get;
set;
}

/// <summary>
/// 功能点对应的菜单实体
/// </summary>
[ForeignKey("MenuID")]
public virtual Menu Menu { get; set; }
}
}


User.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace DataEntity
{
[Table("Sys_User")]
public class User
{
[Key]
[Display(Name = "用户编号")]
[Column(Order = 0)]
public int UserID { get; set; }

[Display(Name = "用户名")]
[Column(Order = 1)]
[Required(ErrorMessage = "用户名必须提供")]
[StringLength(50, ErrorMessage = "不能超过50个字符")]
public string UserName { get; set; }

[Display(Name = "用户姓名")]
[Column(Order = 2)]
[Required(ErrorMessage = "用户姓名必须提供")]
[StringLength(50, ErrorMessage = "不能超过50个字符")]
public string RealName { get; set; }

[Display(Name = "密码")]
[Column(Order = 3)]
[Required(ErrorMessage = "登录密码必须提供")]
[StringLength(50, ErrorMessage = "不能超过50个字符")]
[DataType(DataType.Password)]
public string Password { get; set; }

[Display(Name = "性别")]
[Column(Order = 4)]
[Required(ErrorMessage = "性别必须提供")]
[StringLength(1, ErrorMessage = "不能超过1个字符")]
public string Sex { get; set; }
}
}


UserFunction.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace DataEntity
{
[Table("Sys_UserFunction")]
public class UserFunction
{
/// <summary>
/// 主键ID
/// </summary>
[Key]
public int RelationID
{
get;
set;
}
/// <summary>
/// 用户ID
/// </summary>
public int UserID
{
get;
set;
}
/// <summary>
/// 功能ID
/// </summary>
public int FunctionID
{
get;
set;
}

/// <summary>
/// 用户ID对应的用户实体
/// </summary>
[ForeignKey("UserID")]
public virtual User User { get; set; }

/// <summary>
/// 功能点ID对应的功能点实体
/// </summary>
[ForeignKey("FunctionID")]
public virtual Function Function { get; set; }
}
}



数据库上下文
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using DataEntity;

namespace DataAccess
{
public class DataContext : DbContext
{
private readonly static string CONNECTION_STRING = "name=matrixkey";
public DataContext()
: base(CONNECTION_STRING)
{

}
static DataContext()
{
Database.SetInitializer<DataContext>(new DataInitializer());
}


public DbSet<Menu> Sys_Menu { get; set; }
public DbSet<User> Sys_User { get; set; }
public DbSet<Function> Sys_Function { get; set; }
public DbSet<UserFunction> Sys_UserFunction { get; set; }

/// <summary>
/// 对EF默认契约的修改写在这里
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

}

/// <summary>
/// 数据库数据初始化
/// </summary>
private class DataInitializer : CreateDatabaseIfNotExists<DataContext>
{
protected override void Seed(DataContext context)
{
var DefalutMenus = new List<Menu>{
new Menu { MenuID=1, MenuName ="系统配置",OrderCode=10,Url = "" ,ParentID = 0},
new Menu { MenuID=2, MenuName ="菜单管理",OrderCode=11,Url = "/Menu/Index" ,ParentID = 1},
new Menu { MenuID=3, MenuName ="组织机构",OrderCode=20,Url = "" ,ParentID = 0},
new Menu { MenuID=4, MenuName ="用户管理",OrderCode=21,Url = "/User/Index" ,ParentID = 3},
new Menu { MenuID=5, MenuName ="人事管理",OrderCode=21,Url = "/Staff/Index" ,ParentID = 3}
};
DefalutMenus.ForEach(s => context.Sys_Menu.Add(s));
context.SaveChanges();

var DefalutUsers = new List<User>{
new User { UserID =1,UserName ="admin",RealName= "系统管理员",Password = "1",Sex="1" },
new User { UserID =2,UserName ="matrixkey",RealName= "落阳",Password = "1",Sex="0" }
};
DefalutUsers.ForEach(s => context.Sys_User.Add(s));
context.SaveChanges();

var DefalutFunction = new List<Function>
{
new Function{MenuID=2,FunctionCode="M1-02-01",FunctionName="浏览"},
new Function{MenuID=4,FunctionCode="M1-04-01",FunctionName="浏览"},
new Function{MenuID=5,FunctionCode="M1-05-01",FunctionName="浏览"}
};
DefalutFunction.ForEach(s => context.Sys_Function.Add(s));
context.SaveChanges();

var DefalutUserFunction = new List<UserFunction>
{
new UserFunction{UserID=1,FunctionID=1},
new UserFunction{UserID=1,FunctionID=2},
new UserFunction{UserID=1,FunctionID=3}
};
DefalutUserFunction.ForEach(s => context.Sys_UserFunction.Add(s));
context.SaveChanges();
}
}
}
}



请大伙给看看,这有问题么?为什么只创建了数据库而没有表。。
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_15366657 2014-08-08
  • 打赏
  • 举报
回复
为啥要在这里整个表,在sql里写好了再用不更方便了。
落阳 2012-06-16
  • 打赏
  • 举报
回复
自己顶一下,再提供一些情况,希望有人能解决。

我用“原先没问题的项目”进行测试,webconfig中连接的是SQL2008R2。
结果是:基础提供程序在 Open 上失败。
DTC开了的,百度过相应的解决方法,都不可靠。反正我没解决。

然后我把webconfig中的data source从连接SQL2008改成连接SQL2000。
结果是:登录时被提示输入字符串的格式不正确。查看数据库,发现数据库已建立,表没有建立。

真是莫名其妙啊 。有高人出现解决一下吗?万分感激
落阳 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

代码太长,不如先说说你的想法?
[/Quote]
代码不长哇,实体类看下属性名即可,反正就4个实体,然后通过EF映射到数据库咯。

为啥只创建了数据库(可见识别了webconfig中的连接字符串),却未创建4个实体对应的表?
q107770540 2012-06-15
  • 打赏
  • 举报
回复
代码太长,不如先说说你的想法?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧