似乎MVC3和EF4.1的大部分焦点都围绕着"代码优先" - 我似乎无法找到符合以下条件的任何示例或教程:
这样的示例或教程是否存在?是否有任何记录的"最佳实践"如何实现这一点,或者没有以这种方式构建解决方案的理由?
entity-framework entity-framework-4.1 asp.net-mvc-3 database-first ef-database-first
我有我的asp.net mvc 3应用程序与实体框架,我使用Database First模型来设置它.
我的步骤如下:1.使用表生成数据库2.创建ADO.NET实体数据模型文件(.edmx)并导入表3.在设计内部我添加了代码生成项并使用了ADO.NET DbContext Generator 4. a使用所有表格模型制作的Model1.tt持有者
我已经编辑了模型并使用DataAnnotations Attributes更新它们(仅用于众所周知的示例)
public class LogOnModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我对数据库进行更改并将其更新为edmx文件时,所有模型都将被覆盖,DataAnnotations属性将会消失.
我的问题:我如何使用数据库第一模型并仍然编辑模型进行特定验证,如我可以免费使用代码优先模型?(请不要第三方工具解决方案)谢谢
asp.net-mvc entity-framework edmx data-annotations database-first
如果是模型优先,我们使用[MetadataType(typeof(ConceptMetadataSource))]附加MetadataSource文件,其中包含所有数据注释,如 [HiddenInput(DisplayValue = false)]或[Display(Name = "Title")].
例如:
[MetadataType(typeof(ConceptMetadataSource))]
public partial class Concept
...
Run Code Online (Sandbox Code Playgroud)
现在,我使用数据库优先方法,因为有一个现有的数据库.这次,实体类由edmx模型自动创建.在每个实体类的开头,下面都有注释行:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
由于一旦我们修改了数据库中的表,代码就会重新生成,每次重新生成实体类时都会删除数据注释.
谁能告诉我注释那些实体类的最佳方法是什么?谢谢.
entity-framework entity-framework-4 asp.net-mvc-3 database-first
基本上,我有一个Sql Server数据库,其架构发生了变化.发生这种情况时,我必须更新EF数据模型.如果我所做的只是添加或删除一个表,这很好:去设计器,从它存在的多个位置之一找到"从数据库更新模型..."并完成向导.
不幸的是,该向导不仅让我从数据库中替换整个模型.它也可以一次只做一件事.因此,如果我做出多个架构更改的不幸决定,甚至更糟,忘记我做了什么:我必须做多个步骤,从模型中添加,刷新和删除表.
这显然很麻烦.因此,由于缺乏更好的程序,我不得不吹掉模型并完成从数据库重新创建它的所有步骤.废话:我在配置文件中留下了连接字符串.现在我必须删除它并启动向导,否则它将不会生成相同的实体类名称,现在我的所有代码都会中断.
为什么这不能为我吹掉模型并从数据库生成?更重要的是,为什么没有其他人问过这个问题呢?人们在做什么?
我使用EF创建模型并使用DbContext 5.X生成器生成其上下文.现在我重命名了我的一个实体的类名.现在当我运行我的代码时,我得到"实体类型Student2不是当前上下文模型的一部分." 错误.
var context = new MyEntities(connectionString);
foreach(var student in context.Students)
{
Console.WriteLine(class.Name.ToString());
}
Run Code Online (Sandbox Code Playgroud)
在我的数据上下文中.
public partial class MyEntities : DbContext
{
public MyEntities()
: base("name=MyEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
// public DbSet<Student> Students { get; set; } -> Origional
public DbSet<Student2> Student { get; set; } // I renamed Student to Student2
}
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?由于一些冲突,我需要重命名我的班级.
我在我的应用程序中使用Entity framework v 6.1.1.
我的数据库有2个表User,Location.
User table
-----------
UserID
HomeCityId(FK -> LocationId)
CurrentCityId(FK -> LocationId)
Location table
LocationId
LocationName
Run Code Online (Sandbox Code Playgroud)
使用DB First方法,我为这两个表创建了一个Entity数据模型.
生成的User表实体类
public int UserId;
public int HomeCityId;
public int CurrentCityId;
public virtual Location Location { get; set; }
public virtual Location Location1 { get; set; }
Run Code Online (Sandbox Code Playgroud)
有没有办法将这些虚拟属性命名为HomeCity和CurrentCity而不是Location和Location1?
entity-framework navigation-properties database-first ef-database-first
VS2010 Pro + SqlServer Express.
除了网络(订购了2本书)之外,已经被放入ASP.NET MVC 3而没有任何指导,我甚至无法开始.
我得到的MVC本身.不是问题.PHP,Ruby,甚至可怕的WebForms都牢牢抓住了我的工具带,在此之前有很长的C++ QT客户端 - 服务器开发历史.
使用EF4 ORM将ASP.NET MVC 3 绑定到数据库正在扼杀我.
目标:
我已经看过并阅读了很多关于这个用例的博客,论坛 帖子,演练和堆栈 溢出 帖子.我甚至试过骑魔法独角兽,然后是最新的4.2beta1和DbContext发生器.
但无法起步.我按照说明进行操作,只是不明白怎么做任何事的.'伙伴'需要什么约定(如果有的话)?我该如何使用它?如何获取数据?我该如何写数据?每个例子都不同.MVC指南始终专注于UI方面.EF指南不包括MVC中的用法.
这些是基本问题,我现在感觉自己是WWW中最无能的白痴.
有没有人正在以我上面描述的方式使用MVC3和EF4.x?
当我使用Entity Framework codefirst时,我可以使用以下代码来获取我的数据库连接字符串:
var db = new dbContext();
Console.Writeline(db.Database.Connection.ConnectionString);
Run Code Online (Sandbox Code Playgroud)
但是当我首先执行数据库时,数据库不可用.我如何(从运行时的代码)开始获取实体框架正在使用的数据库连接字符串?
.net entity-framework connection-string entity-framework-4.1 database-first
我正在Visual Studio 2012中开发我的第一个MVC项目.因为我更喜欢"数据库优先"方法,所以我开始设计数据库.问题是:为什么当我想添加外键时,我禁用了所有关键属性进行编辑(左):

我只能直接修改脚本(右),但这只是解决方案吗?或者我做错了什么?
谢谢你的帮助.
我有一个像这样的SQL表:
DepartmentID是部门的父母.我通过这个表构建了一个树(在ASP.net(C#)项目中):
上面树中的记录是:
我需要让父母在这棵树上.
我可以在SQL Server中这样做(例如id=2,id输入参数):
with cte1
as
(
select id,name,DepartmentID, 0 AS level
from Department
where id =2
union all
select Department.ID,Department.name,Department.DepartmentID, level+1
from Department
inner join cte1 on Department.ID=cte1.DepartmentID
)
select * from cte1
Run Code Online (Sandbox Code Playgroud)
输出(id = 2(A))
输出(id = 4(A1))
我知道EF不支持cte,但我需要在EF中获得此结果.
如果有人可以解释这个问题的解决方案将是非常有帮助的.