我从web.config中删除了连接字符串,Entity Framework仍然连接到数据库!连接字符串在哪里设置?这是一个问题,因为我需要将我的网站的实时版本指向实时数据库.
我有两个代码第一个模型,Foo和FooState,其中Foo有一个可选的FooState.
public class Foo
{
[Key]
public int FooId { get; set; }
public FooState FooState { get; set; }
}
public class FooState
{
[Key]
public int FooStateId { get; set; }
[Required]
public int State { get; set; }
[Required]
public Foo Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是当我尝试将外键添加到FooState时,就像这样
public class FooState
{
[Key]
public int FooStateId { get; set; }
[Required]
public int State { get; set; }
[ForeignKey("Foo")]
[Required]
public int FooId
public Foo Foo { …Run Code Online (Sandbox Code Playgroud) 我有一个类,我想保留元数据 - 有几个交互场景,所以meta允许我为不同的交互类型保留不同的元.
class Feed()
{
Guid FeedId { get; set; }
ObjectMetaDictionary Meta { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望EF能够序列化这个ObjectMetaDictionary并将其作为字符串/ VarChar存储在数据库中.当我检索一条记录时,我希望它被反序列化为ObjectMetaDictionary.
EF支持吗?我该怎么做?
我正在使用Entity Framework Code First.
解决:我在下面提供了一个解决我的问题的答案.一旦SO允许我,我会接受这个答案.
我有一个表,为表的某些行存储一些额外的数据,如:
public class QuoteExtra
{
[Key]
public int QuoteId { get; set; }
// More fields here
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在这个表中添加行,我明确地设置了PK.
如果我只是如上所述,设置值并提交行会导致该值被丢弃并替换为数据库中自动生成的值(并且该列在实际模式中定义为Identity列).
这似乎是正确的解决方案:
public class QuoteExtra
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int QuoteId { get; set; }
// More fields here
}
Run Code Online (Sandbox Code Playgroud)
然而,这反而让我成为例外:
当IDENTITY_INSERT设置为OFF时,无法在表'EnumTest'中为标识列插入显式值.
那么,我如何编写我的类,以便我能够在EF中设置主键的值?
编辑:
我尝试添加以下基于代码的迁移将IDENTITY_INSERT设置为ON:
public override void Up()
{
Sql("SET IDENTITY_INSERT QuoteExtra ON");
}
Run Code Online (Sandbox Code Playgroud)
我跑了它并再次尝试,但得到了与上面相同的例外.奇怪的是,数据库确实反映了这个设置,并且直接运行SQL确实允许我为主键插入任意值 - 因此看起来实体框架本身正在执行此规则,而忽略了识别IDENTITY_INSERT不在事实定下来了.我需要在EF本身设置它吗?
编辑2:
我误解了IDENTITY_INSERT; 我假设将它设置为无限期地保留在该表中.实际上它只要"会话"就可以存在,这意味着例如在迁移中设置它意味着它只存在......只要迁移运行,并且与我以后的.Add()之后的未来连接没有关系. ,这解释了为什么我仍然有这个例外 - 数据库确实是异常的来源,而不是EF.由于IDENTITY_INSERT每个会话最多限制一个表,因此这是一种相当低效的方法 - 首先不创建Identity PK列似乎是一个更好的路径.
我首先使用Entity Framework代码进行数据访问,并且我有一个具有Employees集合的Company类.Employee类还有一个Company属性.
我希望能够序列化公司并在序列化中包含员工列表.
这是公司:
public class Company
{
public long Id { get; set; }
public string Name { get; set; }
public DateTime? Established { get; set; }
public virtual IList<Employee> Employees { get; set; }
public DateTime? DateCreated { get; set; }
public DateTime? DateUpdated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是员工
public class Employee
{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int …Run Code Online (Sandbox Code Playgroud) 我在ASP.NET MVC 3 Web应用程序中使用Entity Framework"Code First"方法.在我的数据库中,我有几个计算列.我需要使用这些列来显示数据(工作正常).
但是当我在这个表中插入行时,我收到以下错误:
无法修改"ChargePointText"列,因为它是计算列或是UNION运算符的结果.
有没有办法在我的课堂上将房产标记为只读?
public class Tariff
{
public int TariffId { get; set; }
public int Seq { get; set; }
public int TariffType { get; set; }
public int TariffValue { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int ChargePoint { get; set; }
public string ChargePointText { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个需要与遗留代码接口的新应用程序:(.
我试图调用的存储过程使用RETURN作为结果.我尝试执行和使用返回值会导致异常:
InvalidOperationException:执行命令时,参数必须是数据库参数或值.
不希望更改存储过程以另一种方式返回值,因为它要么需要更新遗留应用程序,要么维护几乎重复的存储过程.
遗留存储过程简介:
DECLARE @MyID INT
INSERT INTO MyTable ...
SELECT @MyID = IDENTITY()
RETURN @MyID
Run Code Online (Sandbox Code Playgroud)
我的实体框架/ DbContext工作,产生上述InvalidOperationException.
SqlParameter parm = new SqlParameter() {
ParameterName = "@MyID",
Direction = System.Data.ParameterDirection.ReturnValue
};
DbContext.Database.ExecuteSqlCommand("EXEC dbo.MyProc", parm);
Run Code Online (Sandbox Code Playgroud)
寻找任何和所有不需要修改存储过程的解决方案.
使用Entity Framework Power Tools Beta 2扩展,它使用以下导入生成模型类:
using System.Data.Entity.Infrastructure;
Run Code Online (Sandbox Code Playgroud)
我需要使用Visual Studio 2010将哪些参考包含到我的项目中?
目前,我有以下参考资料:
在" 添加引用"对话框中,我有以下内容:

我尝试在EF中进行测试,创建多对多的关系,因为我总是将One映射到One或One to Many,我已经在互联网上试了一个例子,这个例子适用于插入寄存器,但我无法读取寄存器
这是我的课程,我不知道是什么HashSet,我在网站上得到了这个代码
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Course> CoursesAttending { get; set; }
public Person()
{
CoursesAttending = new HashSet<Course>();
}
}
public class Course
{
public int CourseId { get; set; }
public string Title { get; set; }
public ICollection<Person> Students { get; set; }
public Course()
{
Students = new HashSet<Person>();
} …Run Code Online (Sandbox Code Playgroud) 我使用EF Code First创建了具有彼此集合的类.实体:
public class Field
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<AppUser> Teachers { get; set; }
public Field()
{
Teachers = new List<AppUser>();
}
}
public class AppUser
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string UserName => Email;
public virtual List<Field> Fields { get; set; }
public AppUser()
{
Fields …Run Code Online (Sandbox Code Playgroud) ef-code-first ×10
c# ×3
asp.net-mvc ×1
automapper ×1
json.net ×1
many-to-many ×1
primary-key ×1
sql-server ×1