我一直在寻找有关如何使用代码首先EF 4.1声明外键关系和其他约束的资源,而没有太多运气.基本上我是在代码中构建数据模型并使用MVC3来查询该模型.一切都通过MVC工作,这是伟大的(对微软的赞誉!)但现在我希望它不工作,因为我需要有数据模型约束.
例如,我有一个Order对象,它有很多属性是外部对象(表).现在我可以创建一个没有问题的订单,但是无法添加外键或外部对象.MVC3设置这没问题.
我意识到我可以在保存之前在控制器类中自己添加对象,但是如果没有满足约束关系,我希望调用DbContext.SaveChanges()失败.
新的消息
所以,具体来说,当我尝试保存Order对象而不指定客户对象时,我希望发生异常.如果我只是编写大多数Code First EF文档中描述的对象,这似乎不是行为.
最新代码:
public class Order
{
public int Id { get; set; }
[ForeignKey( "Parent" )]
public Patient Patient { get; set; }
[ForeignKey("CertificationPeriod")]
public CertificationPeriod CertificationPeriod { get; set; }
[ForeignKey("Agency")]
public Agency Agency { get; set; }
[ForeignKey("Diagnosis")]
public Diagnosis PrimaryDiagnosis { get; set; }
[ForeignKey("OrderApprovalStatus")]
public OrderApprovalStatus ApprovalStatus { get; set; }
[ForeignKey("User")]
public User User { get; set; }
[ForeignKey("User")]
public User Submitter { get; set; }
public DateTime …Run Code Online (Sandbox Code Playgroud) 我有一个User< Country模特.用户属于某个国家/地区,但可能不属于任何(空外键).
我该如何设置?当我尝试插入具有空国家/地区的用户时,它告诉我它不能为空.
模型如下:
public class User{
public int CountryId { get; set; }
public Country Country { get; set; }
}
public class Country{
public List<User> Users {get; set;}
public int CountryId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
错误: A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Country_Users ]"}
mapping entity-framework foreign-key-relationship ef-code-first entity-framework-4.1
在我首先设计一些Entity Framework应用程序之前,我只看了几个网络广播.我真的没有阅读那么多文档,我觉得我现在正在为此而痛苦.
我一直List<T>在我的课堂上使用,而且效果很好.
现在我已经阅读了一些文档,并说它应该一直在使用ICollection<T>.我改为这个,它甚至没有导致模型上下文改变.这是因为兼并List<T>和ICollection<T>继承IEnumerable<T>,这是EF实际需要的吗?
但是,如果是这种情况,为什么EF文档没有声明它需要IEnumerable<T>而不是ICollection<T>?
在任何情况下,我做了什么都有任何缺点,或者我应该改变它?
我正在使用Entity Framework Code First和MVC 5.当我使用个人用户帐户身份验证创建我的应用程序时,我获得了一个帐户控制器以及所有必需的类和代码,以使Indiv用户帐户身份验证工作.
已经存在的代码包括:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DXContext", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我继续使用代码创建了我自己的上下文,所以我现在也有以下内容:
public class DXContext : DbContext
{
public DXContext() : base("DXContext")
{
}
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Paintings> Paintings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后,我有以下种子方法为我添加一些数据,同时开发:
protected override void Seed(DXContext context) …Run Code Online (Sandbox Code Playgroud) 我是Entity Framework的新手.我正在尝试设置一个使用EF 6的MVC应用程序.我正在使用Code First Migrations.我在应用程序中使用区域,并希望在每个区域中有不同的DbContexts来分解它.我知道EF 6有ContextKey,但我找不到有关如何使用它的完整信息.目前,我一次只能使用一个上下文.
有人可以给出一个足够详细的例子,让我有一个像EF一样的新人来理解和使用.
我已经将[Required]数据注释添加到ASP.NET MVC应用程序中的一个模型中.创建迁移后,运行该Update-Database命令会导致以下错误:
无法将值NULL插入列'Director',表'MOVIES_cf7bad808fa94f89afa2e5dae1161e78.dbo.Movies'; 列不允许空值.更新失败.该语句已终止.
这是因为某些记录的Director列中包含NULL .如何自动将这些值更改为默认值(例如"John Doe")导演?
这是我的模型:
public class Movie
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
[Required]
public string Genre { get; set; }
[Range(1,100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
[StringLength(5)]
public string Rating { get; set; }
[Required] /// <--- NEW
public string Director { get; set; }
} …Run Code Online (Sandbox Code Playgroud) 我只想弄清楚是否有一种使用EF Code First CTP 5存储和检索二进制(文件)数据的简单方法?我真的希望它使用FILESTREAM类型,但我真的只是想找到一些方法来使它工作.
我看到一些与使用.NET框架版本4的Entity Framework Code-First的非常简单的查询相关的一些非常奇怪的性能.LINQ2Entities查询如下所示:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
Run Code Online (Sandbox Code Playgroud)
这需要超过3000毫秒才能执行.生成的SQL看起来非常简单:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
Run Code Online (Sandbox Code Playgroud)
在通过Management Studio运行时,此查询几乎立即运行.当我更改C#代码以使用SqlQuery函数时,它在5-10毫秒内运行:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Run Code Online (Sandbox Code Playgroud)
因此,完全相同的SQL,在两种情况下都会对结果实体进行更改跟踪,但两者之间存在差异.是什么赋予了?
我用Entity Framework Code First,
我的连接字符串位于配置文件中:
<connectionStrings>
<clear/>
<add name="ApplicationServices" connectionString="Data Source=PC-X;Initial Catalog=MYdb;Integrated Security=True"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
当我尝试访问数据(应该创建数据库的东西)时,会出现以下错误:
<connectionStrings>
<clear/>
<add name="ApplicationServices" connectionString="Data Source=PC-X;Initial Catalog=MYdb;Integrated Security=True"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我在MVC 3应用程序中使用Entity framework 4.1.我有一个实体,我有主键由两列(复合键)组成.并且这在另一个实体中用作外键.如何建立关系?在普通的scnerios我们使用:
public class Category
{
public string CategoryId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是如果类别有两列键怎么办?
c# entity-framework foreign-keys composite-key ef-code-first
ef-code-first ×10
c# ×3
asp.net-mvc ×2
.net ×1
foreign-keys ×1
icollection ×1
ienumerable ×1
list ×1
mapping ×1
performance ×1
seeding ×1