我在教程中看到了很多,导航属性为ICollection<T>.
这是实体框架的强制性要求吗?我可以用IEnumerable吗?
使用ICollection代替IEnumerable甚至是什么的主要目的是List<T>什么?
我想保存我的编辑到数据库,我在ASP.NET MVC 3/C#中使用实体框架代码优先,但我收到错误.在我的Event类中,我有DateTime和TimeSpan数据类型,但在我的数据库中,我分别有日期和时间.这可能是原因吗?在保存对数据库的更改之前,如何在代码中转换为适当的数据类型.
public class Event
{
public int EventId { get; set; }
public int CategoryId { get; set; }
public int PlaceId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public DateTime EventDate { get; set; }
public TimeSpan StartTime { get; set; }
public TimeSpan EndTime { get; set; }
public string Description { get; set; }
public string EventPlaceUrl { get; set; }
public Category Category …Run Code Online (Sandbox Code Playgroud) 我刚开始使用EF代码,所以我在这个主题中完全是初学者.
我想在团队和比赛之间建立关系:1场比赛= 2队(主场,客场)和结果.我认为创建这样的模型很容易,所以我开始编码:
public class Team
{
[Key]
public int TeamId { get; set;}
public string Name { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
public class Match
{
[Key]
public int MatchId { get; set; }
[ForeignKey("HomeTeam"), Column(Order = 0)]
public int HomeTeamId { get; set; }
[ForeignKey("GuestTeam"), Column(Order = 1)]
public int GuestTeamId { get; set; }
public float HomePoints { get; set; }
public float GuestPoints { get; set; }
public DateTime …Run Code Online (Sandbox Code Playgroud) 错误消息:
"自创建数据库以来,支持'AddressBook'上下文的模型已经改变.手动删除/更新数据库,或者使用IDatabaseInitializer实例调用Database.SetInitializer.例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并且可选择用新数据播种."
我正在尝试使用代码优先功能,以下是我写的:
var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
var contact = new Contact
{
ContactID = 10000,
FirstName = "Brian",
LastName = "Lara",
ModifiedDate = DateTime.Now,
AddDate = DateTime.Now,
Title = "Mr."
};
context.contacts.Add(contact);
int result = context.SaveChanges();
Console.WriteLine("Result :- "+ result.ToString());
}
Run Code Online (Sandbox Code Playgroud)
上下文类:
public class AddressBook : DbContext
{
public AddressBook()
{ }
public AddressBook(DbModel AddressBook)
: base(AddressBook)
{
}
public DbSet<Contact> contacts { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 题
是否可以使用流畅的语法或属性在属性上定义唯一约束?如果没有,有哪些解决方法?
我有一个带有主键的用户类,但我想确保电子邮件地址也是唯一的.这是否可以直接编辑数据库?
解决方案(基于马特的答案)
public class MyContext : DbContext {
public DbSet<User> Users { get; set; }
public override int SaveChanges() {
foreach (var item in ChangeTracker.Entries<IModel>())
item.Entity.Modified = DateTime.Now;
return base.SaveChanges();
}
public class Initializer : IDatabaseInitializer<MyContext> {
public void InitializeDatabase(MyContext context) {
if (context.Database.Exists() && !context.Database.CompatibleWithModel(false))
context.Database.Delete();
if (!context.Database.Exists()) {
context.Database.Create();
context.Database.ExecuteSqlCommand("alter table Users add constraint UniqueUserEmail unique (Email)");
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我已经看了几次EF Code First的演示,还没有看到EFCF如何与存储过程一起工作.
如何声明一个将使用某些sp的方法?我是否可以将实体传递给调用sp的方法,而无需手动将实体属性映射到sp参数?
另外,如果我改变模型会发生什么?它会在从模型中重新创建表格时丢失我的sp吗?触发器呢?
如果不支持这些东西,是否有计划在将来支持它们?
我正在创建一个POCO模型,首先使用实体框架代码CTP5.我正在使用装饰来创建PK列的属性映射.但是如何在多个列上定义PK,具体来说,如何控制索引中列的顺序?这是班级中属性顺序的结果吗?
谢谢!
是否有可能拥有实体框架(我目前使用的是Code First Approach with CTP5)将所有DateTime值存储为数据库中的UTC?
或者是否有一种方法可以在映射中指定它,例如在last_login列的这一个中:
modelBuilder.Entity<User>().Property(x => x.Id).HasColumnName("id");
modelBuilder.Entity<User>().Property(x => x.IsAdmin).HasColumnName("admin");
modelBuilder.Entity<User>().Property(x => x.IsEnabled).HasColumnName("enabled");
modelBuilder.Entity<User>().Property(x => x.PasswordHash).HasColumnName("password_hash");
modelBuilder.Entity<User>().Property(x => x.LastLogin).HasColumnName("last_login");
Run Code Online (Sandbox Code Playgroud) 我如何首先在实体框架代码中使用数据库视图,
我在EF5中有一个代码优先的实体模型.但我想手动管理数据库更改 - 我不希望EF修改我现有的数据库及其所有数据.但是当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,告诉我需要先使用代码迁移.我怎么关掉这个?
code-first ×10
c# ×5
.net ×2
asp.net-mvc ×1
database ×1
datetime ×1
icollection ×1
migration ×1
orm ×1
sql ×1
utc ×1
view ×1