我在VS2012中使用EF5,数据库第一种方法.
当我将新表X添加到设计图面时,表格显示,然后我保存并编译而没有错误.但是,没有生成类X(在解决方案资源管理器中的MyModel.tt下).
如果我右键单击MyModel.tt并选择"运行自定义工具",则会生成类.
此行为与我在EF4和VS 2010中所遇到的不同,后者会自动生成类.
我有一个错误
using语句中使用的类型必须可以隐式转换为'System.IDisposable'
在线
using (var context = new EntityContainer())
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Globalization;
using System.Data;
using System.Data.Entity;
using school.usi.susibar.model;
namespace school.usi.susibar.test
{
class Program
{
public static void Main(string []args)
{
using (var context = new EntityContainer())
{
addOrderStatusType(context);
Console.ReadLine();
}
}
private static void addOrderStatusType(EntityContainer context)
{
try
{
OrderStatusType type = new OrderStatusType
{
Name = "Vyrizeno",
CancelPermission = false,
ChangePermission = false
};
context.OrderStatusTypes.Add(type);
context.SaveChanges();
Console.WriteLine("Pridano"); …Run Code Online (Sandbox Code Playgroud) 我们正在使用Entity Framework 5.0 Code First和Automatic Migrations.
我有一个这样的课:
public class TraversalZones
{
public int Low { get; set; }
public int High { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
然后我们意识到这些属性并不是正确的名称,所以我们改变了它们:
public class TraversalZones
{
public int Left { get; set; }
public int Top { get; set; }
}?
Run Code Online (Sandbox Code Playgroud)
重命名在整个项目中正确重构,但我知道自动迁移不够智能,无法在IDE中获取这些显式重命名,因此我首先检查以验证此列重命名的唯一挂起迁移:
update-database -f -script
Run Code Online (Sandbox Code Playgroud)
果然它只是显示SQL下降低和高并添加Left和Top.然后我添加了手动迁移:
add-migration RenameColumns_TraversalZones_LowHigh_LeftTop
Run Code Online (Sandbox Code Playgroud)
并将生成的代码修复为:
public override void Up()
{
RenameColumn("TraversalZones", "Low", "Left");
RenameColumn("TraversalZones", "High", "Top");
}
public override void Down()
{
RenameColumn("TraversalZones", "Left", "Low");
RenameColumn("TraversalZones", "Top", "High");
}
Run Code Online (Sandbox Code Playgroud)
然后我更新了db:
update-database …Run Code Online (Sandbox Code Playgroud) entity-framework ef-code-first ef-migrations entity-framework-5
我正在使用Entity Framework 5.0我的项目.我查看了互联网,我看到对于实体框架数据上下文,有另一个构造函数,它具有连接字符串的字符串参数.
在我生成的data context我没有这样的构造函数.我查看了基础DbContext,它有这样的构造函数.
代码生成错了吗?我从数据库生成代码.这可能是原因吗?
事实证明我可以编辑代码生成模板文件来添加新的构造函数.现在我添加了新的构造函数.该文件是edmx模型下的MyDataContext.tt文件.你有c#代码与模板代码混合在一起.您可以从那里复制无参数构造函数并将其粘贴到下面.然后你可以改变它并为它添加一个字符串参数,并将该参数传递给DbContext构造函数,如下所示:base(myString).
我试图在我的MVC 4中第一次使用SimpleMembership,我已经有了一个基于它的现有数据库和EF5模型!我搜索了很多,但我无法找到如何在我的情况下使用它,并在我自己的模型下拥有一切.
如果有人能让我知道如何做到这一点会很棒.
谢谢
ef-database-first asp.net-mvc-4 sql-server-2012 entity-framework-5 simplemembership
考虑Person和Address定义为的类
class Person
{
public int PersonId { get; set; }
public virtual Address Address { get; set; }
}
class Address
{
public int PersonId { get; set; }
public virtual Person Person { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
只有一些人有一个地址,但所有地址都有一个人.这是一对一或零关系,因此我将其配置为
modelBuilder.Entity<Address>()
.HasKey(a => a.PersonId)
.HasRequired(a => a.Person)
.WithOptional(a => a.Address);
Run Code Online (Sandbox Code Playgroud)
现在,在我的代码中,以下方法(急切加载)完美地运行.
var person = context.Person
.Include(a => a.Address)
.Single(a => a.PersonId == 123);
var address = person.Address; // address != null (correct)
Run Code Online (Sandbox Code Playgroud)
但是,以下方法(延迟加载)不会.
var …Run Code Online (Sandbox Code Playgroud) entity-framework lazy-loading ef-code-first entity-framework-5 entity-framework-6
ASP.NET MVC 4,EF5,Code First,SQL Server 2012 Express
在模型中强制使用唯一值的最佳做法是什么?我有一个具有'url'属性的place类,对于每个地方都应该是唯一的.
public class Place
{
[ScaffoldColumn(false)]
public virtual int PlaceID { get; set; }
[DisplayName("Date Added")]
public virtual DateTime DateAdded { get; set; }
[Required(ErrorMessage = "Place Name is required")]
[StringLength(100)]
public virtual string Name { get; set; }
public virtual string URL { get; set; }
};
Run Code Online (Sandbox Code Playgroud)
为什么不能只放置一个[Unique]数据注释?
我已经看过1或2次讨论,但没有谈到最佳实践.使用Code First可以以某种方式告诉数据库在数据库中的字段上设置唯一约束吗?
什么是最简单的方法 - 什么是最佳实践?
c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我刚刚开始制作EntityTypeConfiguration类并做了以下操作
public class Xyz
{
public int PlaceId { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
public int HumanTypeId { get; set; }
public int AddressId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并在EntityTypeConfiguration类中
public sealed class XyzConfiguration:EntityTypeConfiguration<Xyz>
{
public XyzConfiguration()
{
ToTable("Place", "dbo");
HasKey(p => p.PlaceId);
Property(p => p.PlaceId)
.HasColumnName("PlaceId")
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(p => p.Name);
Property(p => p.Location). ;
Property(p => p.HumanTypeId);
Property(p => p.AddressId);
}
}
Run Code Online (Sandbox Code Playgroud)
现在如何设置DbGeography和外键列HumanTypeId , …
在我的开发机器上,我尝试使用包管理器控制台中的update-database重新创建我的数据库.我相信我已按照上述帖子中的说明进行操作.
我收到此错误消息:
发生文件激活错误.物理文件名'\ WRDatabase.mdf'可能不正确.诊断并更正其他错误,然后重试该操作.CREATE DATABASE失败.无法创建列出的某些文件名.检查相关错误.
我正在运行的命令是:
update-database -ConfigurationTypeName WRConfiguration -ConnectionStringName localWR -Verbose
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的命令中,我传递了一个连接字符串名称,并且看起来正在使用连接字符串,因为.mdf文件的名称出现在错误消息中.
有趣的是,我能够运行我的代码并且我的数据库已经创建,但它是用错误的名称创建的(它被命名为"VIN.DataModel.WRContext",它是DbContext的完整命名空间和类名).我的猜测是,当我的代码运行时,EF无法找到用于创建数据库的连接字符串.这是故意的,因为我将此上下文映射到在服务器上运行的数据库以及在本地计算机上运行的db的副本(即,我将为同一个DbContext使用两个连接字符串).
这是应用程序配置:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="localWR" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog =WRDatabase;AttachDBFilename=|DataDirectory|\WRDatabase.mdf; Integrated Security=True;MultipleActiveResultSets=True" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
在Configuration类的构造函数中,AutomaticMigrationsEnabled设置为false.
这是上下文类:
public class WRContext : DbContext
{
static WRContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<WRContext, VIN.DataModel.WRMigrations.WRConfiguration>());
}
public WRContext()
{
}
public WRContext(string connectionString)
: base(connectionString)
{
}
public DbSet<Emp> Emps { get; set; }
public DbSet<Inv> Invs { get; set; } …Run Code Online (Sandbox Code Playgroud) 我在WinForms项目中使用EntityFramework 5.0版,.net 4.5.
我为我创建了2个重要的实体
public class Role
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public bool StockPermission { get; set; }
public bool ItemPermission { get; set; }
public bool OrderPermission { get; set; }
public bool PersonPermission { get; set; }
public bool StatisticPermission { get; set; }
}
public class Person
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String Name { get; set; } …Run Code Online (Sandbox Code Playgroud)