我在VS2010,POCO和模型优先方法中使用EF4.
我的实体具有以下属性:Id:Guid,Name:String,Created:DateTime,Modified:DateTime,Revision:Int32.
我创建我的实体,设置名称并使用EF4上下文将其保存到数据库.这应该将Id设置为新的Guid(与Identity-SGP一起使用),Created设置为now,Modified left as null,Revision设置为0.我检索实体,更改名称并再次保存.这次Modified-value应设置为now,revision应为1.
如何使用EF4与EDMX设计师最好地完成此操作?
更新:
这是我最终使用的:
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified).Where(e => e.Entity is EntityBase))
{
EntityBase entity = entry.Entity as EntityBase;
if (entry.State == EntityState.Added)
{
entity.Version = new Version() { Major = 1, Minor = 0, Revision = 0 };
entity.Created = DateTime.Now;
if (OperationContext.Current != null) entity.CreatedBy = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;
}
else if (entry.State == EntityState.Modified)
{
entity.Version.Revision++;
entity.Modified = DateTime.Now;
if (OperationContext.Current != null) entity.ModifiedBy = …Run Code Online (Sandbox Code Playgroud) 我有一个Person表,一个Employee表和一个Contractor表.所有员工都是人,所有承包商都是人,每个人都是雇员或承包商.像这样:
我怎样才能使用Model First完成这个概念?遗产?
实体类型<classname>不是当前上下文的模型的一部分 - 并且 - EF 4.1 Code First错误 - 实体类型SomeType不是当前上下文的模型的一部分是类似的问题但它们是"代码优先"透视只有更简单的数据模型,并解决连接字符串和映射问题.请仔细看看这个.
// HomeController.cs
public ActionResult Index()
{
var _db = new MealsContext();
var m = _db.Meals.ToList();
var d = _db.Drinks.ToList();
return View();
}
Run Code Online (Sandbox Code Playgroud)
抛出异常会检索Drinks集合:
The entity type Drink is not part of the model for the current context.
Run Code Online (Sandbox Code Playgroud)
// Meal.cs
public class Meal
{
public int Id { get; set; }
public string Stuff { get; set; }
public virtual ICollection<Meat> Meats { get; set; …Run Code Online (Sandbox Code Playgroud) 我在EF中有一些模型和表格,你可以在这里看到其中一个:

现在,当我想从模型生成数据库时,它将's'添加到生成的sql中的表名:
CREATE TABLE [dbo].[Options] (
[Id] int IDENTITY(1,1) NOT NULL,
[Name] nvarchar(50) NOT NULL,
[Price] int NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我也禁用了多个名称,但没有改变:
这会导致部署Web应用程序时出错.我怎样才能防止多元化?
sql entity-framework visual-studio-2010 pluralize ef-model-first
有没有替代使用Include热切载入实体?
我无法使用的原因Include是它似乎区分大小写.
请考虑以下示例:
我有两个表:


注意案例的区别.
当我想急于负载Sager的Stamkartotek我用Include,但Include不加载Stamkartotek:

**更新1**
我注意到这种奇怪的行为 - 如果我使用Stamkartotek它的任何字段加入正确:

但是,如果我去,只检索Stam_nr而不是整个对象的值- 它给了我A而不是a:

迄今为止的研究:
更新2
SQL生成Include:
FROM [dbo].[Sager] AS [Extent1]
INNER JOIN [dbo].[Stamkartotek] AS [Extent2] ON [Extent1].[Klient_Stam_nr] = [Extent2].[Stam_nr]
WHERE 'jek15' = [Extent1].[Sags_nr]
Run Code Online (Sandbox Code Playgroud)
更新3
在单独的查询中加载它们,并让changetracker修复引用.它似乎也不起作用:

我想创建一个类型为空的外键GUID这样的
[ForeignKey("CreatedBy")]
[Display(Name = "Created by")]
public Guid? CreatedById { get; set; }
public virtual User CreatedBy { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是当我添加迁移并更新数据库时,它不会使它在SQL中的表设计中允许为null.
还有另一种方法可以让它首先通过模型允许null吗?
我首先使用Visual Studio 2012与实体框架5模型.我想使用每个层次结构策略的表生成我的数据库,但找不到该选项.实体设计器数据库生成Power Pack不适用于visual studio 2012,或者我找不到它.
有人建议吗?
我知道我可以在文件夹中添加模板
C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen
使其在DDL生成模板下拉列表中可见,但随后我需要将模板分发给我的团队成员,以便他们可以将模板添加到同一文件夹中.
我希望通过以某种方式将模板添加到VS 2012解决方案并使其在同一下拉列表中可见,我可以获得相同的结果
你知道实现这个目标的方法吗?我正在使用VS 2012并生成数据库,我使用的是Model First方法
我在这里已经看到了很多这个问题,但是所有解决方案都涉及使用EF代码优先.我使用模型优先使用设计器来布局我的实体及其关系.我想更新我的生产服务器的方案而不会丢失数据.
因为我是新手,所以我不知道实现这一目标的最佳解决方案是什么.我可以手动编写SQL代码来在我的生产方案中创建新表,而不是使用database-first导入.edmx到Visual Studio中吗?这个解决方案有用吗?
或者我可以生成我的代码优先表示,.edmx然后使用该迁移过程?
请分享一些知识.
感谢大家
entity-framework database-migration code-first ef-model-first
我刚刚升级到 Entity Framework Core 2,现在我遇到了一个额外的列存在问题并且有一个唯一的键,即使它不在我的模型中并且没有在其他任何地方定义。
指数:
migrationBuilder.CreateTable(
name: "Vouchers",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Code = table.Column<Guid>(nullable: false),
IsClaimed = table.Column<bool>(nullable: false),
LastModified = table.Column<DateTime>(nullable: false),
NumberOfUnits = table.Column<int>(nullable: false),
TransactionId = table.Column<int>(nullable: false),
TransactionId1 = table.Column<int>(nullable: true) // why is this here?
},
constraints: table =>
{
table.PrimaryKey("PK_Vouchers", x => x.Id);
table.ForeignKey(
name: "FK_Vouchers_Transactions_TransactionId1",
column: x => x.TransactionId1,
principalTable: "Transactions",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
Run Code Online (Sandbox Code Playgroud)
TransactionId1 不在模型中:
public class Voucher : IAutoLastModified
{ …Run Code Online (Sandbox Code Playgroud) ef-model-first ×10
c# ×4
.net ×2
asp.net-mvc ×1
c#-4.0 ×1
code-first ×1
csdl ×1
dbcontext ×1
guid ×1
inheritance ×1
linq ×1
pluralize ×1
sql ×1
sql-server ×1
t4 ×1