我最近下载了Entity Framework Code First CTP5,并且遇到了这种情况的麻烦.我有两张表如下:
Members table : ID Name Comments table : ID Comment CommentedMemberID CommentMemberID
而且,数据应如下所示:
Members ID Name 1 Mike 2 John 3 Tom Comments ID Comment CommentedMemberID CommentMemberID 1 Good 1 2 2 Good 1 3 3 Bad 2 1
然后,我编码如下:
public class Member
{
public int ID {get; set; }
public string Name { get; set;}
public virtual ICollection<Comment> Comments { get; set;}
}
public class Comment
{
public int ID { get; …Run Code Online (Sandbox Code Playgroud) 我如何使用modelBuilder映射这样的东西?其中可以为空的外键引用相同的表主键
Table: Task
taskID int pk
taskName varchar
parentTaskID int (nullable) FK
Run Code Online (Sandbox Code Playgroud)
任务类:
public class Task
{
public int taskID {get;set;}
public string taskName {get;set;}
public int parentTaskID {get;set;}
public Task parentTask {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
...
modelBuilder.Entity<Task>()
.HasOptional(o => o.ParentTask)....
Run Code Online (Sandbox Code Playgroud) entity-framework data-modeling code-first entity-framework-4 entity-framework-ctp5
使用以下简单实体类,EF4.1 Code-First将UserId在初始化数据库时为PK 列创建聚簇索引.
public class User
{
[Key]
public int UserId { get; set; }
public int AppId { get; set; }
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
出于性能的考虑,我的设计目标是保持生成的Users表物理集群根据AppIdcoulmn而不是PK.
在我的Initializer类中,我试图手动删除自动生成的PK聚簇索引并创建我需要的任何聚簇索引,但这里没有线索来预测PK__Users__25518C17索引的自动生成名称!
我是Code-First世界的新手,并且真的不知道我的设计目标是否有任何解决方法.
提前致谢
sql-server entity-framework code-first ef-code-first entity-framework-4.1
当两个表之间存在链接(连接)表时,我有一个关于两个表之间的一对多关系的问题.
示例表:
ChildTable:
ID int NOT NULL PK
Relation int NOT NULL
ParentTable:
ID int NOT NULL PK
Name nvarchar(50) NOT NULL
ParentChildren:
ParentTable_ID int NOT NULL PFK
ChildTable_ID int NOT NULL PFK
Run Code Online (Sandbox Code Playgroud)
实体:
public class ChildTable
{
public ChildTable()
{
this.ParentTables = new List<ParentTable>();
}
public int ID { get; set; }
public int Relation { get; set; }
public virtual ICollection<ParentTable> ParentTables { get; set; }
}
public class ParentTable
{
public ParentTable()
{
this.ChildTables = new List<ChildTable>(); …Run Code Online (Sandbox Code Playgroud) 使用.NET客户端应用程序,我试图通过asp .net web api JSON发布一个包含对象B集合的对象A,创建一个LocalDB数据库并存储数据.然后再次获取对象A.
该应用程序包括3个项目.一个asp .net mvc 4 web api项目,一个.Net控制台应用程序和一个.Net类库.asp .net应用程序和控制台应用程序都引用类库,其中包括对象A和B的类定义.
班级图书馆:
public class Actor
{
public Actor()
{
this.Movies = new HashSet<Movie>();
}
public int ActorID { get; set; }
public string Name { get; set; }
public virtual ICollection<Movie> Movies { get; set; }
}
public class Movie
{
public Movie()
{
this.Actors = new HashSet<Actor>();
}
public int MovieID { get; set; }
public string Name { get; set; }
public virtual ICollection<Actor> Actors { get; …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,记录不同的网球锦标赛事件.它还记录每个事件的获胜者
有问题的两个类是:
public class Event {
public int EventId { get; set; }
public string EventName { get; set; }
public virtual ICollection<Entry> Entries { get; set; }
public int? WinningEntryId { get; set; }
[ForeignKey("WinningEntryId")]
public virtual Entry WinningEntry { get; set; }
}
public class Entry {
public int EntryId { get; set; }
public int EventId { get; set; }
[ForeignKey("EventId")]
public virtual Event Event { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,Event.WinningEntryId列可以为空,因为我不想指定获胜者,因为锦标赛可能仍在进行中.
现在,问题是当我运行Update-Database命令时,它会生成以下表:
Entry
- EntryId
- EventId …Run Code Online (Sandbox Code Playgroud) 我首先使用VS 2010和Entity Framework代码(版本6).我在它自己的上下文中有两个实体,我想在它们之间创建一对多的关系.
上下文1具有以下实体:
public class MyTrust
{
public int MyTrustID { get; set; }
public string MyTrustName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和Context 2具有以下实体:
public class MyLocation
{
public int MyLocationID { get; set; }
public int MyTrustID { get; set; }
public virtual MyTrust MyTrust { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用以下Fluent API
modelBuilder.Entity<MyLocation>()
.HasRequired(m => m.MyTrust);
Run Code Online (Sandbox Code Playgroud)
Context 2的迁移文件包含正确的密钥,但也创建了一个MyTrust已存在于其他上下文中的新表.
我知道我可以编辑迁移文件,但这不是解决方案.
我的问题是,如何停止创建第二个MyTrust表.
UPDATE
上面有一个重大缺陷,我将错误的代码粘贴到Context 2中.现在纠正了.道歉.
昨天我在Management Studio中创建了数据库,现在我想使用EF Code First在程序中创建它.
这是我的数据库的链接:http://s11.postimg.org/6sv6cucgj/1462037_646961388683482_1557326399_n.jpg
我做了什么:
public class GameModel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreationTime { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string TotalTime { get; set; }
public DateTime RouteStartTime { get; set; }
public DateTime RouteEndTime { get; set; }
public int MaxPlayersPerTeam { get; set; }
public int CityId …Run Code Online (Sandbox Code Playgroud) 我已经启用了迁移:
enable-Migrations -ProjectName ProjectOne -ContextTypeName MyIdentity.Config.MyIdentityContext -MigrationsDirectory Identity\\Migrations
Run Code Online (Sandbox Code Playgroud)
我指定了我的上下文,因为它位于一个单独的命名空间中,我指定了该目录,因为我希望将迁移放在不同的目录中.
启用此类迁移后,我在预期位置(Identity\Migrations文件夹)中获取预期的配置文件(我删除了种子过程中的注释)
Friend NotInheritable Class Configuration
Inherits DbMigrationsConfiguration(Of MyIdentityDbContext)
Public Sub New()
AutomaticMigrationsEnabled = False
MigrationsDirectory = "Identity\\Migrations"
End Sub
Protected Overrides Sub Seed(context As MyIdentityDbContext)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在此之后我创建了一个迁移:
add-migration Initial
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个错误,说明该文件已经存在:
Scaffolding migration 'Initial'.
System.Runtime.InteropServices.COMException (0x80040400): Unable to add '201506111233565_Initial.vb'. A file with that name already exists.
Server stack trace:
at EnvDTE.ProjectItems.AddFromFileCopy(String FilePath)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
Exception rethrown at [0]: …Run Code Online (Sandbox Code Playgroud) .net entity-framework code-first ef-code-first ef-migrations
我有一个实体框架CodeFirst模型,我从现有的数据库创建,我想使用DataAnnotations以不同的方式装饰一些char和varchar.
char和varchar之间的区别在于Char具有固定长度并且varchar具有可变长度.
对于Varchar我正在使用[Maxlength(length)]对于char这是正确的方法还是有更好的方法来定义类中的字符串属性被映射为数据库中的char?
code-first ×10
.net ×3
c# ×3
asp.net-mvc ×1
foreign-keys ×1
json ×1
mapping ×1
mysql ×1
sql-server ×1