我试图首先使用代码和流畅的API来创建一个对象,该对象包含来自同一个表的两个不同的实体.换句话说,转移对象持有对两个不同坦克对象的引用 - 一个是源,另一个是目的地.
但是,当我使用下面的代码时,我得到一个Exception,声明"引用关系将导致不允许的循环引用".
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Source)
.WithMany(t => t.OutboundTransfers);
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Destination)
.WithMany(t => t.InboundTransfers);
Run Code Online (Sandbox Code Playgroud)
我最好的猜测是,它认为我将两把钥匙指向同一辆坦克?知道我怎么能做到这一点?
编辑:从实体框架代码优先添加.WillCascadeOnDelete(false)找到答案- 来自同一个表的两个外键
我有一个类,里面有一个字符串和一个枚举器列表.
public enum SomeEnum
{
Undefined=0,
Enum1,
Enum2,
Enum3,
End
}
public class SomeObject
{
public virtual int ID{get; set;}
public virtual String Name {get; set;}
public virtual IList<SomeEnum> EnumList {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,应该有一个SomeObjects列表,包含ID和Name.应该有另一张这样的地图:
5 2
5 3
3 1
9 3
Run Code Online (Sandbox Code Playgroud)
意思是,ID为5的玩家有Enum2和Enum3,另一个ID为3的玩家有Enum1,而ID为9的玩家有Enum3.他们说可以映射int,float等,但我不想在列表中创建IList.
有一种简单的方法可以让流利的nhibernate这样做吗?
HasMany(x => x.EnumList )
.Cascade.All()
.Table("ObjectEnumTable");
Run Code Online (Sandbox Code Playgroud)
此映射文件抛出异常并说"关联引用未映射的类:SomeEnum".
提前致谢.
//Earlier in the code, in each Model:
query = ModelName::select('table_name.*')
//Later in the code in a function in a Trait class that is always called
if ($column == 'group_by')
{
$thing_query->groupBy($value);
$thing_query->select(DB::raw('COUNT('.$value.') as count'));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在eloquent查询生成器中追加或包含单独的select函数?
实际的 - > select()先前设置,然后调用此函数.我想在后面的函数中有条件地添加count列,该函数将查询传递给它.
嗨,我正在努力了解如何构建一个可读的,也可以防止Fluent-API出错,而不会对用户造成太大限制
保持简单让我们说我们想要改变下面的课程,以便流利
public class Car
{
public int Gallons { get; private set; }
public int Tons { get; private set; }
public int Bhp { get; private set; }
public string Make { get; private set; }
public string Model { get; private set; }
public Car(string make, string model)
{
Make = make;
Model = model;
}
public void WithHorsePower(int bhp)
{
Bhp = bhp;
return this;
}
public void WithFuel(int gallons)
{
Gallons = gallons;
}
public …Run Code Online (Sandbox Code Playgroud) 异步操作似乎不适合我喜欢编写的流畅接口.Asynchrony如何与Fluent结合使用?
示例:我有两个先前返回的方法,MyEntity但在更改为Async时效果不佳.在我异步他们之后,我必须await完成任务的结果,但我必须为每个添加的步骤执行此操作:
MyEntity Xx = await(await FirstStepAsync()).SecondStepAsync();
Run Code Online (Sandbox Code Playgroud)
一定有更好的方法.
它在laravel文档中说可以在连接上添加where子句,但每当我使用where子句尝试使用我的代码时,我都会收到错误:Call to undefined method Illuminate\Database\Query\JoinClause::where().任何人都知道如何在join子句中添加where子句?
Laravel网站示例:
DB::table('users')
->join('contacts', function($join)
{
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);
})
->get();
Run Code Online (Sandbox Code Playgroud)
代码我正在尝试实现:
DB::table('users')
->join('contacts', function($join)
{
$current_date = date('Y-m-d');
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.effective_date', '>=', $current_date);
})
->get();
Run Code Online (Sandbox Code Playgroud) 我正在设计一个流畅的API,其用法有点像这样:
IUser user = work
.Timeout(TimeSpan.FromSeconds(5))
.WithRepository(c => c.Users)
.Do(r => r.LoadByUsername("matt"))
.Execute();
Run Code Online (Sandbox Code Playgroud)
所以,让我们说work是类型IUnitOfWork,但该方法WithRepository(c => c.Users)返回称为界面IActionFlow<IUserRepository>是IDisposable.
当我调用Execute()并获得最终结果时,我失去了对该IActionFlow<IUserRepository>实例的引用,因此我无法处理它.
将实例自身放在Execute()方法上有什么缺点?
就像是:
public TResult Execute()
{
// ...
Dispose();
return result;
}
Run Code Online (Sandbox Code Playgroud)
代码似乎编译得很好,但我正在寻找可能因此而出现的奇怪行为或错误.这是不好的做法吗?
我在Java中使用Apache的HttpClient Fluent Facade中的一些示例代码供开发人员扩展.他们真的很喜欢流利的外观,能够打电话:
this.body = Request.Get(uri.build()).execute().returnContent().asString();
Run Code Online (Sandbox Code Playgroud)
另外,我可以通过调用获取状态代码:
this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
不幸的是,有几个实例我需要除了正文之外的状态代码.根据这个问题,我看到我可以让他们学习HttpClient对象 -
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
Run Code Online (Sandbox Code Playgroud)
但是,这意味着初始化HttpClient对象并且似乎拒绝了Fluent接口和Request.Get(或Post)语法.有没有办法同时获取状态代码和正文而不会丢失Fluent语法并且不进行两次离散调用?
我有一个引用自己的表,但我正在努力获得我想要的映射.我希望能够将儿童定义为拥有母亲,父亲和/或监护人的特定人的集合.守护者可能是父亲或母亲.
我希望能够看到人们被列入名单的人们可以浏览的树状图; 用户可以扩展一个人的节点以显示该人的所有孩子,而不管儿童定义的关系(母亲,父亲或监护人).
public partial class Person
{
[Key]
public int ID { get; set; }
[StringLength(100)]
public string Name { get; set; }
public int? GuardianID { get; set; }
[Column("MotherID")]
public int? MotherID { get; set; }
[Column("FatherID")]
public int? FatherID { get; set; }
[ForeignKey("MotherID")]
public virtual tblPerson Mother { get; set; }
[ForeignKey("FatherID")]
public virtual tblPerson Father { get; set; }
[ForeignKey("GuardianID")]
public virtual tblPerson Guardian { get; set; }
[InverseProperty("Guardian")]
[InverseProperty("Father")]
[InverseProperty("Mother")]
public virtual IEnumerable<tblPerson> …Run Code Online (Sandbox Code Playgroud) entity-framework fluent data-annotations self-referencing-table
我对如何查询模型对象的子项并立即使用它感到困惑.我Client的Station儿子很多
final class Client: PostgreSQLModel {
var stations: Children<Client, Station> {
return children(\.clientID)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中,我有一个客户列表,我想看看并抓住他们的电台.
func clientIndexHandler(_ req: Request) throws -> Future<View> {
return Client.query(on: req).all().flatMap(to: View.self) { clients in
let sorted = clients.sorted { ... }
let content = try sorted.map { client in
let stations = try client.stations
.query(on: req)
.all()
.map(to: [String].self) { stations in
return stations.map { $0.name }
}
// Now I want to use the stations for other stuff. …Run Code Online (Sandbox Code Playgroud)