我已经创建了控制台应用程序.然后我执行了Install-Package EntityFramework,设置了目标.net 4.0.
我的简单模型是
public class Abonent
{
public Abonent() {}
[Key]
public int AbonentId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的dbcontext是(ModelContext.cs)
public class ModelContext : DbContext
{
public ModelContext():base(){}
public DbSet<Abonent> Abonents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Program.cs是
class Program
{
static void Main(string[] args)
{
Database.DefaultConnectionFactory = new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
ModelContext _abonentContext = new ModelContext();
Abonent abonent=new Abonent();
_abonentContext.Abonents.Add(abonent);
_abonentContext.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是当我按下右键单击ModelContext.cs并选择时Entity Framework -> Generate View,我会得到一个消息框,说"调用目标已抛出异常".
我做错了什么?是否存在ef电动工具的替代品?(VS 2010 SP1,实体框架Power Tools …
我正在使用EF 5 Code First和VS 2012.我有文章和标签的课程.每篇文章至少有一个标签相关联.请参阅以下课程.
public class Article
{
public int ArticleId { get; set; }
public virtual ICollection<ArticleTag> Tags { get; set; }
}
public class Tag
{
public int TagId { get; set; }
public string TagName { get; set; }
}
public class ArticleTag
{
public int ArticleId { get; set; }
public int TagId { get; set; }
// navigation property
public virtual Article Article { get; set; }
public virtual Tag Tag { get; set; …Run Code Online (Sandbox Code Playgroud) 我有这样的模型:
namespace Ad.NegCred.Data.Model {
public enum DataKind {
F, //Takibe al?n?p henüz tahsil edilmeyen ferdi kredi bildirimi
FA, //Ayn? dönemde takibe al?nan ve tahsil edilen ferdi kredi bildirimi
FF, //daha önceki dönemlerde takibe al?nd??? bildirilmi? ferdi kredi tahsil bildirimi
K, //Takibe al?n?p henüz tahsil edilmeyan kredi kart?
KA, //Ayn? dönemde takibe al?nan ve tahsil edilen kredi kart?
KF //Daha önceki dönemlerde takibe al?nd??? bildirilmi? kredi kart? tahsil bildirimi
}
public class Datum {
[Key]
public long Id { get; set; …Run Code Online (Sandbox Code Playgroud) c# entity-framework ef-code-first .net-4.5 entity-framework-5
我有一个MeterPeak实体,这个实体有一个MeterReading实体作为外键(包含在问题的底部).MeterReading实体具有由MeterSiteId和DateTime组成的复合主键.
所以我的理解是,在我的MeterPeak实体中,我必须输入一个MeterSiteId和一个与现有MeterReading实体匹配的DateTime,以满足外键约束.我不应该被允许链接到不存在的外键.
但是,在MeterPeakController的编辑操作中,我有以下代码
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(MeterPeak meterpeak)
{
if (ModelState.IsValid)
{
unitOfWork.MeterPeakRepository.Update(meterpeak);
unitOfWork.Save();
return RedirectToAction("Index");
}
ViewBag.MeterSiteId = new SelectList(unitOfWork.MeterSiteRepository.Get(b => true), "Id", "Location", meterpeak.MeterSiteId);
return View(meterpeak);
}
Run Code Online (Sandbox Code Playgroud)
当我输入与现有仪表读数不匹配的MeterSiteId和DateTime并尝试保存时,我希望ModelState.IsValid检查返回false,但它不会.它只有在到达unitOfWork.save()行时才会失败,并且在将此更改保存到dbcontext时出错
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_dbo.MeterPeaks_dbo.MeterReadings_MeterSiteId_DateTime"
Run Code Online (Sandbox Code Playgroud)
为什么ModelState.IsValid在到达dbcontext.save之前没有找到这个问题?
public class MeterPeak
{
[Key]
public int Id { get; set; }
[ForeignKey("PeakReading"), Column(Order = 1)]
public int MeterSiteId { get; set; }
[ForeignKey("PeakReading"), Column(Order = 2)]
public DateTime DateTime { get; set; }
public int? Rating { …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework ef-code-first entity-framework-5
我有2个实体,让我们说A和B.它们之间的关系是多对多的所以我有另一个实体,让我们说C.
表A的列:
-Id(PK) - >由数据库生成的类型int
-PropertyA1
-PropertyA2
-PropertyA3
表B的列:
-Id(PK) - >由数据库
-Description 生成的类型int
表C的列(对于此表,我不确定是否更好地添加由数据库生成的额外列Id作为前面的表): -
IdA(PK和实体A的外键)
-IdB(PK和外键实体B)
表B具有在种子方法上插入的固定值(覆盖).其条目如下所示:
Id描述
1"部分描述1"
2"部分描述2"
3"部分描述3"
从表单中,用户引入与表A(propertyA1,...,propeprtyA3)相关的信息,然后单击按钮将数据保存到数据库.
用户单击按钮的表单将数据保存到数据库后,首先执行以下操作:
A a = new A(){ PropertyA1=something_1,
PropertyA2=something_2,
PropertyA3=something_3 };
context.A.Add(a);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
然后在保存对数据库的更改之后,我有数据库生成的Id(我在保存到数据库之前没有id),也就是a.Id,现在我可以通过执行以下操作来继续向表C添加一个条目:
B b = this.ObtainAppropriateB();
C c = new C(){ IdA = a.Id,
IdB = b.Id };
context.C.Add(c);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1)我不知道a.Id以前在context.A.Add(a)之后做context.SaveChanges因为它是由数据库生成的.
2)如果在context.C.Add(c)之后context.SaveChanges失败了,我怎么能回滚以前完成的工作?:
context.A.Add(a);
context.SaveChanges();
我不能做以下因为我没有a.Id以前做SaveChanges:
A a = new A(){ PropertyA1=something_1,
PropertyA2=something_2,
PropertyA3=something_3 };
context.A.Add(a);
B b = this.ObtainAppropriateB();
C c = new C(){ …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2010,C#4.0和Entity Framework 5.0.我多年来一直在使用数据库优先开发,但我正在尝试先迁移到代码并遇到问题.阅读和搜索似乎没有解决问题
我已将我的问题简化如下 - 我有两个类 - 评估者和文档.
public class Assessor
{
public int AssessorID { get; set; }
public virtual List<Document> Documents { get; set; }
}
public class Document
{
public int DocumentID { get; set; }
public string DocumentLocation { get; set; }
public string DocumentName { get; set; }
public virtual List<Assessor> Assessors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
与上下文
public class DocumentAssignment : DbContext
{
public DbSet<Assessor> Assessors { get; set; }
public DbSet<Document> …Run Code Online (Sandbox Code Playgroud) 关于此问题的任何帮助或建议,我们将不胜感激。
我目前正在从事一个项目,该项目需要将我们的数据层从本地MS SQL实例更改为托管Oracle解决方案。
以前,我们使用实体框架(代码优先)构建数据层。我想对新数据层采用相同的方法。我们有几个使用此库的应用程序,因此,尝试使新数据层与原始数据层(对象,名称等)保持尽可能近的距离是理想的。我知道Code-First没有得到Oracle的正式支持(正在进行中),但是在其他方面取得了一些成功的地方,已经读过了。因此,由于这些原因,我试图这样做。
我已经创建了Oracle EF数据层,以使其与原始MS SQL EF数据层尽可能地匹配。我当前遇到的问题是,当我运行查询以从数据层检索第一个或默认实体时,出现以下异常:
Oracle.DataAccess.Client.OracleException:ORA-00942:表或视图不存在
如果我使用完全相同的DbContext实例,而是使用DbContext.Database.SqlQuery(sqlString)运行sql查询,则它将起作用。我之所以提及这是因为我已经阅读了“表或视图不存在”错误,是指数据库权限问题。这次似乎并非如此,因为我在同一连接对象中使用了完全相同的连接字符串。唯一的区别似乎在于使用传统的sql语句与DbSet实体(和配置)。
我的实体是相对简单的平面对象。
public class HourlyPrice
{
public DateTime MarketDate { get; set; }
public int HourEnding { get; set; }
public string LocationId { get; set; }
public string LocationName { get; set; }
public decimal? Price { get; set; }
public int IsValid { get; set; }
public DateTime DateInserted { get; set; }
public DateTime? DateUpdated { get; set; }
}
public HourlyPriceConfiguration(string viewName)
{
ToTable(viewName);
HasKey(x => new …Run Code Online (Sandbox Code Playgroud) 我正在尝试从EF 4.3.1升级到EF 5,也从.Net 4升级到.Net 4.5.这是一个给我带来麻烦的课程的例子:
using System.ComponentModel.DataAnnotations;
public class MyClass
{
[Key, Column(Order = 0)]
public int CompositeKey1Id { get; set; }
[Key, Column(Order = 1)]
public int CompositeKey2Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
首先我得到错误Cannot resolve symbol 'Column'.
所以我添加,
using System.ComponentModel.DataAnnotations.Schema;因为ColumnAttribute移动到Schema命名空间.现在我收到一个Ambiguous reference错误,因为在EntityFramework.dll和System.ComponentModel.DataAnnotations.dll中都存在ColumnAttribute.
所以我尝试删除System.ComponentModel.DataAnnotations.dll作为参考,现在我得到Cannot resolve symbol 'Key'KeyAttribute在该DLL中,但不是在EntityFramework.dll中.
除非在EF5中不再需要KeyAttribute,否则我将不得不降级到.Net 4以获得此代码进行编译.这不可能是对的,是吗?我在这里错过了什么?
为什么在以下示例中需要[NotMapped]属性:
public virtual ICollection<Blog> Blogs { get; set; }
[NotMapped]
public List<Blog> NewBlogs{
get{
return Blogs.Where(x=>x.Date > DateTime.Now).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
没有[NotMapped]属性,我得到一个异常:
列名称Blog_ID无效
数据库中的列名是BlogID.
编辑
我希望,没有setter的属性永远不会直接映射到数据库,并且首先会被代码自动忽略.